2012-09-20 94 views
1

我有以下動態SQL代碼,插入4列作爲參數以及表名稱。動態SQL語句(需要unicode編碼?)

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

我不知道這是否正確或是否需要因爲參數(N的「select語句之前)的Unicode編碼?如果我指定所有的列和表名,因爲那麼沒有參數,它工作正常。如果確實需要unicode,我不太清楚如何改變它,因爲我沒有在Microsoft SQL中使用過它。

任何幫助將不勝感激!

回答

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; 
+0

是的,我增加了N's,一切都像魅力一樣,謝謝!我使用遊標,並有10列,這就是爲什麼我插入這些額外的空字符串。 – Kristina