繁体   English   中英

将 Static SQL 查询转换为存储过程上的动态 SQL

[英]Converting a Static SQL Query into Dynamic SQL on a Stored Procedure

我写了一个这样的存储过程,

Alter PROCEDURE sp_bestReviewer_report 
                (
                @StartingLetter AS VARCHAR(1),
                @CountsReq AS DECIMAL(3),
                @ReqRev AS INT
                @RequiredColumn AS SYSNAME
                )
        AS
        BEGIN
            SELECT TOP(@ReqRev) @RequiredColumn, Count(Reviewer) AS Total FROM [reviews_not_sent] WHERE LEFT(Reviewer,1) = @StartingLetter 
            GROUP BY (Reviewer) 
            HAVING (Count(Reviewer) > @CountsReq OR Count(Reviewer) < @CountsReq) 
            ORDER BY    
            Total DESC;
        END;

我正在尝试将@RequiredColumn(必需的列)作为参数动态传递给存储过程。

我怎样才能做到这一点。

您需要动态 SQL 传入列名:

BEGIN
    DECLARE @sql NVARCHAR(MAX);
    SET @sql = '
SELECT TOP (@ReqRev) [RequiredColumn], Count(Reviewer) AS Total
FROM [reviews_not_sent]
WHERE LEFT(Reviewer, 1) = @StartingLetter 
GROUP BY Reviewer 
HAVING Count(Reviewer) <> @CountsReq 
ORDER BY Total DESC
';

    SET @sql = REPLACE(@sql, '[RequiredColumn]', QUOTENAME(@RequiredColumn));

    EXEC sp_executesql @sql,
                       N'@ReqRev int, @StartingLetter VARCHAR(1), @CountsReq DECIMAL(3)',
                       @ReqRev=@ReqRev, @StartingLetter=@StartingLetter, @CountsReq=@CountsReq;
END;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM