1

動的SQLを使用しようとしています。100 以上のパラメーターを生成しましたが、速度を上げるために、動的 SQL を使用して、他のテーブルから取得した情報に基づいてテーブルに値を挿入するだけにしようとしています。キャストを追加するなど、多くのことを試しました。

私が意味するものの例:

DECLARE @var1 NVARCHAR(MAX)

-- Loop through and add various values
SET @var1 = @var1 + @parameterName
-- The parameter name is retrieved from a table that holds this information

問題は、「@myFirstParameter」のようなパラメーター名を最終式に追加すると、次のようになることです。

DECLARE @finalString NVARCHAR(MAX)
SET @finalString = 'INSERT INTO myTableName ([myFirstParameter]) VALUES (@myFirstParameter)'
EXEC(@finalString)

「@myFirstParameter」はその値に置き換えられず、次のエラーが発生します。スカラー変数「@myFirstParameter」を宣言する必要があります。

パラメータの文字列名から実際の値に移動する方法を知っている人はいますか? 私はすべての値をハードコーディングすることを避けようとしていますが、私が試みた回避策はすべて失敗し、上で述べたものよりもはるかに悪いように見えるエラーが発生しました。

4

1 に答える 1

1

最初の方法は、名前の代わりにパラメーターの値を SQL 文字列に追加することです。

SET @finalString = 'INSERT INTO myTableName ([myFirstParameter]) VALUES (' + 
    @myFirstParameter + ')'

これは、パラメーターに文字列値があることを前提としています。そうでない場合は、 のようにキャストする必要がありますcast(@myFirstParameter as varchar(128))

2 番目の方法は、sp_executesql代わりに使用することですexec

exec sp_executesql 
    N'INSERT INTO myTableName ([myFirstParameter]) VALUES (@myFirstParameter)',
    N'@myFirstParameter varchar(128)',
    @myFirstParameter = @myFirstParameter;
于 2012-07-25T20:22:37.747 に答える