我已經創建了許多存儲過程之一作爲ETL過程的一部分,並且存儲過程中的其中一個查詢未執行。tsql沒有觸發(通過ssis存儲過程) - SQL Server 2012
環境是SQL Server 2012 SP2。
的離奇事情是這樣的 -
運行插件(受影響的查詢)的選擇部分 - 返回行
運行插件(受影響的查詢) - 將行
運行存儲整通過SSMS的程序 - 插入行
通過SSIS運行 - 所有其他查詢運行禁止關注!
在我的存儲過程中沒有條件,例如如果x = True,則返回並且沒有調試代碼在其中,例如返回。也沒有交易,我讀的表格是一個由數據流充斥着的臨時表。
查詢:
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塊和卡將發出一個錯誤並不會引發錯誤。在程序
唯一的其他非ETL代碼 -
SET NOCOUNT ON
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
但我把這個在我所有的程序在這個應用程序,因爲我不擔心臟讀,因爲他們將不會發生。
我在插入之後直接將tsql放置到我的審計系統中寫入,而@@ RowCount爲0.但是,如果我現在運行select,則會返回超過150萬行。
有什麼建議嗎?
可能看起來像一個愚蠢的問題,但連接管理器的用戶是否有權查詢查詢中的所有對象?你也可以把它變成自己的數據流。至少可以讓你看到正在傳輸的數據。 – David
嗨大衛,是一個通過crendential和代理對數據庫具有完全權限的帳戶。我希望如果它是一個權限問題,但會拋出一個錯誤。 – Raymondo
它可能是需要分號嗎?我有一個try catch的過程。大量的IF語句和大約10個插入和更新。問題是,「:」去哪裏?在每一行上?例如IF @x = 1;開始;設置@y = 2;結束;插入x(字段)值@y;等等?似乎沒有這方面的標準 – Raymondo