2015-07-06 73 views
0

我已經創建了許多存儲過程之一作爲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萬行。

有什麼建議嗎?

+0

可能看起來像一個愚蠢的問題,但連接管理器的用戶是否有權查詢查詢中的所有對象?你也可以把它變成自己的數據流。至少可以讓你看到正在傳輸的數據。 – David

+0

嗨大衛,是一個通過crendential和代理對數據庫具有完全權限的帳戶。我希望如果它是一個權限問題,但會拋出一個錯誤。 – Raymondo

+0

它可能是需要分號嗎?我有一個try catch的過程。大量的IF語句和大約10個插入和更新。問題是,「:」去哪裏?在每一行上?例如IF @x = 1;開始;設置@y = 2;結束;插入x(字段)值@y;等等?似乎沒有這方面的標準 – Raymondo

回答

0

我不知道是什麼導致了它,但我將特定的SQL移入另一個存儲過程,它工作。實際上,它應該保留在自己的存儲過程中,因爲它只與所涉及的過程有關。

0

如果您使用的是執行T-SQL任務,請嘗試將其替換爲執行SQL任務。