1

我有以下动态 SQL 代码,其中插入了 4 列作为参数以及表名。

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 编码?如果我指定所有列和表名,它工作正常,因为没有参数。如果它确实需要 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 回答