2014-06-11 81 views
0

我有一個帶有存儲過程鏈接的網頁,我想將一個變量傳遞給存儲過程select語句。到目前爲止的代碼是 -將變量傳遞給存儲過程SELECT命令

ALTER procedure [dbo].[RTO] 

@Weeknumber int, 
@asset nvarchar(50) 
AS 

Begin 

SELECT @asset 
FROM RTO_weeklyanalysis 
Where weekNumber = @weeknumber 

END 

基本上@asset將是列的名稱,但是這將根據用戶在頁面上選擇的內容而改變。

+0

您使用什麼語言來編寫網頁代碼?你有任何服務器端代碼到目前爲止,你可以告訴我們顯示你在哪裏? – PulseLab

回答

1

您將需要使用動態sql爲此。將對象名連接到您的sql查詢時也使用QuoteName()函數。並使用系統存儲過程sp_executesql執行動態查詢,以最安全,最安全的方式執行動態sql。如下所示:

ALTER procedure [dbo].[RTO] 
@Weeknumber int, 
@asset sysname 
AS 
Begin 
SET NOCOUNT ON; 
    DECLARE @Sql NVARCHAR(MAX); 

SET @Sql = N' SELECT '+ QUOTENAME(@asset) + ' 
       FROM RTO_weeklyanalysis 
       Where weekNumber = @weeknumber' 

EXECUTE sp_executesql @Sql 
        ,N'@Weeknumber int' 
        ,@Weeknumber 
END 
0

您不能以這種方式動態使用列名稱。最簡單的方法來查看你想要的將執行從臨時變量的整個查詢,我的意思是:

declare @query 
set @query = 'SELECT ' + @asset ' FROM RTO_weeklyanalysis Where weekNumber = @weeknumber' 
exec sp_executesql @query