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 移到了另一个存储过程中并且它起作用了。实际上,它保证在自己的存储过程中是正确的,因为它只与相关过程半相关。
我创建了许多存储过程之一作为 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 移到了另一个存储过程中并且它起作用了。实际上,它保证在自己的存储过程中是正确的,因为它只与相关过程半相关。