動的な挿入クエリをストアドプロシージャに記述しています。ストアドプロシージャのパラメータとして列名を受け取っています。動的SQL Serverクエリ
例えば、私はEmployeeId
とEmployeeName
の列を持つEmployee
テーブルを持っています。 Employee
テーブルからDepartment
テーブルにデータを挿入する際に、各従業員名の前にEMP_
を追加する必要があります。
非動的クエリは次のようになります。私は、動的挿入
SET @SqlCommand =
'INSERT INTO ' + @DepartmentTable + '(' + @EmployeeIdColumn + ',' + @EmployeeNameColumn + ')' +
'SELECT ' + @EmployeeIdColumn + ',''EMP_''' + @EmployeeNameColumn + '''' +
'FROM ' +
@EmployeeTable + ' WTB '
EXEC sp_executesql
@stmt = @SqlCommand
を書く場合
INSERT INTO Department(EmployeeId, EmployeeName)
SELECT
EmployeeId, 'EMP_' + EmployeeName
FROM
Employee
問題は、EmployeeName
列のために、それは「EMP_EmployeeName」の代わりに、実際の従業員名を挿入されています。私はEmployeeNameColumn
の前後に引用符を入れてみましたが、うまくいきませんでした。どうすれば修正できますか?
APPEND「EMP」を各従業員名の前には列が「従業員名」のような名前にスペースを持っている状況を回避するのに役立ちます。 @EmployeeNameColumnは、ストアドプロシージャが受け取る列名です。 – turbo88
これはあらかじめ回答していませんが、このブログ記事を読むことを強くお勧めします。私はいつでも動的SQLをやっています。これは、安全な(パラメータ化された)動的SQLと効率的なhttp://www.sommarskog.se/dynamic_sql.html#good_practicesの両方を達成するための "ベストプラクティス"の方法を詳細に示しています。 – bUKaneer
@ turbo88 hey!あなたは解決策を試しましたか? – gofr1