1

テーブル名だけでなく、パラメーターとして挿入された 4 つの列を含む次の動的 SQL コードがあります。

set @SQL = 'select EVENTID, RATE,' + @LossColumn + ',' + @ExpColumn + ',' + @StdDevIndep + ',' + @StdDevCorr + ', '''','''', '''','''' 
from Catastrophe.dbo.' + @CatTableName 
insert into AnalyticsV2.dbo.ResultCSVCat
execute sp_executesql @SQL

これが正しいかどうか、またはパラメーター ('select ステートメントの前の N) のために Unicode エンコードが必要かどうかはわかりません。パラメータがないため、すべての列とテーブル名を指定すると正常に機能します。Microsoft SQL であまり作業したことがないので、ユニコードが必要な場合に変更する方法がよくわかりません。

どんな助けでも大歓迎です!

4

1 に答える 1

3

はい、動的 SQL 文字列は常に NVARCHAR として宣言する必要があり、常に N プレフィックスを使用する必要があります。

DECLARE @sql NVARCHAR(MAX);

SET @sql = N'select EVENTID, RATE,' 
  + QUOTENAME(@LossColumn)  -- QUOTENAME is safer
  + ',' + QUOTENAME(@ExpColumn) 
  + ',' + QUOTENAME(@StdDevIndep) 
  + ',' + QUOTENAME(@StdDevCorr) 
  + ', '''','''', '''',''''  -- not sure I understand this, 
                             -- trying to insert empty strings?
FROM Catastrophe.dbo.' + QUOTENAME(@CatTableName) + ';';

INSERT INTO AnalyticsV2.dbo.ResultCSVCat -- no column list?
EXEC sp_executesql @sql;
于 2012-09-20T18:53:04.523 に答える