2012-07-25 60 views
1

字符串我試圖使用一些動態SQL。我已經產生了超過100個參數,並加快速度,我想使用動態SQL只值插入,我不得不關閉基於從其他表中檢索信息的表。我已經試過像加我的意思鑄造等檢索參數名稱參數值在SQL

例子很多事情:

DECLARE @var1 NVARCHAR(MAX) 

-- Loop through and add various values 
SET @var1 = @var1 + @parameterName 
-- The parameter name is retrieved from a table that holds this information 

的問題是,當我添加參數名稱這將是像「@myFirstParameter」到我最後的表達所以是這樣的:

DECLARE @finalString NVARCHAR(MAX) 
SET @finalString = 'INSERT INTO myTableName ([myFirstParameter]) VALUES (@myFirstParameter)' 
EXEC(@finalString) 

的「@myFirstParameter」沒有得到被它取代的價值,我得到以下錯誤: 必須聲明標量變量「@myFirstParameter」。

有誰知道的方式從參數與實際值的字符串名稱去?我試圖避免硬編碼的所有值和周圍我已經嘗試已經失敗,給了我這似乎是比我上述差很多錯誤的任何工作。

回答

1

第一種方式是添加參數的值,而不是它的名稱,在SQL字符串:

SET @finalString = 'INSERT INTO myTableName ([myFirstParameter]) VALUES (' + 
    @myFirstParameter + ')' 

這是假設參數有一個字符串值。如果沒有,你要投它,就像cast(@myFirstParameter as varchar(128))

第二種方法是使用sp_executesql而不是exec

exec sp_executesql 
    N'INSERT INTO myTableName ([myFirstParameter]) VALUES (@myFirstParameter)', 
    N'@myFirstParameter varchar(128)', 
    @myFirstParameter = @myFirstParameter; 
+0

謝謝!我使用了第二種方法的修改版本,它的功能就像一個魅力。 – Eric 2012-07-26 14:27:15