2016-04-29 115 views
0

我有我的存儲過程可以調用像這樣:EXEC呼叫的作品,但sp_executesql的失敗

EXEC usp_GetDataExport '2016-06-01', 3, 302653, 2 

這個返回數據如預期

然而,當這從一個應用程序/ SSIS包叫,我可以從配置文件中看到它被解釋爲:

EXEC sp_executesql 
     N'EXECUTE usp_GetDataExport @P1, @P2, @P3, @P4' 
     , N'@P1 datetime2(1), @P2 varchar(2), @P3 varchar(3), @P4 varchar(4)' 
     , '2016-06-01' 
     , '3' 
     , '302653' 
     , '2' 

此調用返回空數據。我已經從一個新的查詢窗口運行它,它也無法返回數據。我不知道如何進一步調查。你能幫忙嗎?由於

+2

'@ P3 VARCHAR(3)=「302653'' :) – Devart

回答

1

在你exec三列的數字,想必整數:

exec sp_executesql N'EXECUTE usp_GetDataExport @P1, @P2, @P3, @P4', 
        N'@P1 datetime2(1), @P2 int, @P3 int, @P4 int', 
        '2016-06-01', 3, 302653 , 2 
+0

非常感謝。就是這樣。應該知道 –

+0

但顯然,sp_executesql語句正在被分析器使用varchar數據類型參數「看到」,而不是整數。這是SSIS包執行的時間。你認爲我怎麼防止這個?參數的數據類型在SSIS任務中設置爲NUMERIC,SPROC也接受int數據類型。謝謝 –

+1

這真的很奇怪。你確定沒有兩個不同版本的usp_GetDataExport,其中一個將參數2至4定義爲int,另一個定義爲varchar?也許有兩種不同的模式?或兩個不同的數據庫?或者兩臺不同服務器上的同名數據庫? – SebTHU