我已经编写了这样的存储过程,
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;