2017-08-08 293 views
-1

內使用變量我有以下SQL..What我試圖做的是使用在動態SQL中的存儲過程級別定義的參數:動態SQL

CREATE PROCEDURE [dbo].[Test] 
    (@DealID NVARCHAR(500), 
    @OUTPUT NVARCHAR(MAX) OUTPUT,  
    @FeeType CHAR(1) 
    ) -- I want to use this parameter inside dynamic SQL query 
AS  
    DECLARE @exec_str NVARCHAR(MAX) 
    DECLARE @ParmDefinition NVARCHAR(MAX) 
BEGIN 
    SET @exec_str = N'DECLARE @ParmDefinition NVARCHAR(500) 
         SELECT * FROM @FeeType' --This is where I want to use the variable 

    DECLARE @ParamDefinition nvarchar(max) 
    SET @ParamDefinition = N'@OUTPUT NVARCHAR(MAX) OUTPUT' 

    EXEC sp_executesql @exec_str, @ParamDefinition 

有人能告訴我該怎麼辦它?

謝謝

+1

不能使用參數的標識符,如表名字,唉。 –

+0

你的表名是單個字符? –

+1

[表名作爲變量]的可能重複(https://stackoverflow.com/questions/2838490/表 - 名 - 變量) –

回答

3

在SQL Server標識符不能參數化。
由於您使用動態SQL,無論如何,你可以做這樣的事情:

SET @exec_str= N'Select * from '+ @FeeType 

EXEC(@exec_str) 

然而,這是容易受到攻擊SQL injection。爲了降低風險,以最小應先檢查,這樣的表名存在,而我也將使用quotename只是要在安全方面:

IF EXISTS 
(
    SELECT 1 
    FROM Information_Schema.Tables 
    WHERE TABLE_NAME = @FeeType 
) 
BEGIN 
    SET @exec_str= N'Select * from '+ QUOTENAME(@FeeType) 
    EXEC(@exec_str) 
END