2017-10-09 245 views
-1

我正在從觸發器調用過程並將某些參數從觸發器傳遞到過程。參數是:使用sp_executesql執行時,SQL Server語法異常不正確

@table_name varchar(128), @where_str varchar(200) 

在過程中,我執行的命令爲sp_executesql。我想,我使用的語法不正確,但我找不到解決方案。

這是所執行的查詢:

SET @SqlString = N'update @ptable_name set RepSt=2 @pwhere_str'; 
    SET @ParmDefinition = N'@ptable_name varchar(128), @pwhere_str varchar(200)'; 

    execute sp_executesql @SqlString, @ParmDefinition, 
         @ptable_name = @table_name, @pwhere_str = @where_str; 

傳遞的參數是這樣的:

+0

不知何故,神奇地,我們會知道什麼值被髮送到這些參數?沒有參數值就無法檢查語法。 –

+0

@Used_By_Already我按照你的要求更新了問題。 – Tunahan

回答

0

你最終執行的是一樣的東西:

DECLARE @ptable_name VARCHAR(128) = 'your_Table' 
,  @pwhere_str VARCHAR(200) = 'Your_where_clause' 

UPDATE @ptable_name 
SET  RepSt=2 
WHERE @pwhere_str 

這是不行的,你需要更換可變執行的SQL:

SET @SqlString = N'update @ptable_name set RepSt=2 @pwhere_str'; 
SET @SqlString = REPLACE(REPLACE(@SqlString, '@ptable_name', @table_name), '@pwhere_str', @where_str) 

execute sp_executesql @SqlString 

(非常髒,但這是主意。)

+0

我正在使用這個解決方案,我想感謝你。爲了在concatanated sql字符串中使用int變量,替換是一個挽救生命的解決方案。 – Tunahan

0

SET @SQLString = N'update' + @ptable_name +'set RepSt = 2 @pwhere_str';

+0

這不起作用。當你在這個set子句之前聲明@ptable_name時,它就起作用了。 – Tunahan