tsql 未触发(通过 ssis 的存储过程)- SQL Server 2012

tsql not firing (stored procedure via ssis) - SQL Server 2012

我创建了许多存储过程之一作为 ETL 过程的一部分,但存储过程中的一个查询没有执行。

环境是SQLServer 2012 SP2.

奇怪的是这个-

运行 插入的 select 部分(受影响的查询)- returns 行

运行 插入(受影响的查询)- 插入行

运行 通过 SSMS 的整个存储过程 - 插入行

运行 通过 SSIS - 所有其他查询 运行 除了关注的问题!

我的存储过程中没有条件,例如如果 x = True Return 并且其中也没有调试代码,例如return。也没有交易,我正在阅读的 table 是一个由数据流预先填充的暂存 table。

查询:

INSERT INTO Person.CustomerLinks 
            (PersonID, SystemID, CustomerID_bin, CustomerActive)
SELECT      i.PersonID
,           s.SystemDefID
,           i.CustomerID_bin
,           0
FROM        Staging.IdentifyOutput  i
JOIN        Config.SystemDef        s   ON  s.OutputType        = i.OutputType
WHERE       i.CustomerID_bin    IS NOT NULL
AND         i.OutputType        IN ('L', 'X')
AND         i.PersonID          > 0
AND         i.FileDuplicate     = 1
AND         i.PreferredRecord   = 1
AND         NOT EXISTS (    SELECT  1 
                            FROM    Person.CustomerLinks cl 
                            WHERE   cl.PersonID         = i.PersonID
                            AND     cl.CustomerID_bin   = i.CustomerID_bin)

过程有一个 Try Catch 块,Catch 会引发错误,但没有引发错误。

过程中唯一的其他非 ETL 代码是 -

SET NOCOUNT ON
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

但是我把它放在这个应用程序的所有过程中,因为我不担心脏读,因为它们不会发生。

我在插入后直接放置了 tsql 以写入我的审计系统,@@RowCount 为 0。但是如果我 运行 select 现在我得到超过 150 万行。

有什么建议吗?

如果您使用的是执行 T-SQL 任务,请尝试将其替换为执行 SQL 任务。

我不知道是什么原因造成的,但我将特定的 SQL 移到了另一个存储过程中并且它起作用了。实际上,它保证在自己的存储过程中是正确的,因为它只与相关过程半相关。