动态SQL语句(需要unicode编码吗?)

时间:2012-09-20 18:28:35

标签: sql-server-2008

我有以下动态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中没有那么多。

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分: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;