我有以下动态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中没有那么多。
任何帮助将不胜感激!
答案 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;