2017-10-09 6 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_既にリクエストしたとおりに質問が更新されました。 – Tunahan

答えて

0

何が実行して終了するようなものである:、

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 

(非常に汚い:

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

UPDATE @ptable_name 
SET  RepSt=2 
WHERE @pwhere_str 

これは動作しません、あなたは変数で実行されたSQLを交換する必要がありますこれはアイデアです)

+0

私はこのソリューションを使用しており、ありがとうございます。 concatanated SQL文字列でint変数を使用する場合、置き換えは救済策です。 – Tunahan

0

SET @SqlString = N'update ' + @ptable_name + 'RepSt = 2 @pwhere_str'を設定します。

+0

これは動作しません。これは、このset節の前に@ptable_nameを宣言したときに機能します。 – Tunahan

関連する問題