如何傳遞並使用列名在實際列中檢索bigint變量?如何在存儲過程中將列作爲參數傳遞?
DECLARE @personID BIGINT,
DECLARE @queryString varchar(500)
Set @queryString = 'Select @personID = ' + @PersonColumnID + ' from dbo.Loss_Witness where WitnessID = @witnessID'
exec(@queryString)
錯誤消息狀態「必須聲明變量'@personID'」。我也試過
Set @queryString = 'Select ' + @personID + ' = ' + @witnessPersonID + ' from dbo.Loss_Witness where WitnessID = @witnessID'
並得到了錯誤信息「Error conversion data type varchar to bigint。」
有什麼想法?
@OMG Ponies這裏仍然存在風險,即使輕微:列名不能作爲參數傳遞給sp_executesql,因此也不能將輸入中的串聯原因(但請注意值已參數化)。 – 2010-06-23 20:45:13
我很努力去理解這個評論。您引用的論文非常好,並且在動態SQL上進行了標準讀取。但是不管如何,除非@PersonColumnID被清理,否則在給定的代碼和重寫中有一個巨大的SQL注入點。提問者可能沒有意識到這一點。 – Yellowfog 2010-06-23 20:52:13
SELECT @PersonColumnID ='1; drop database blah - '; – Yellowfog 2010-06-23 20:54:04