Преобразование статического SQL-запроса в динамический SQL по хранимой процедуре - PullRequest
0 голосов
/ 07 октября 2019

Я написал хранимую процедуру следующим образом:

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 (обязательный столбец) в качестве параметра хранимой процедуре.

Как можноЯ делаю это.

1 Ответ

2 голосов
/ 07 октября 2019

Вам необходим динамический 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...