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

Я пытаюсь создать представления с использованием хранимой процедуры и передачей динамического SQL в SQL Server.

ALTER PROCEDURE sp_businessUnit_totalRequests 
    (@ViewName AS VARCHAR(50),
     @RequiredBU AS VARCHAR(50))
AS
BEGIN
    DECLARE @Req_View_Name AS SYSNAME;
    DECLARE @sql NVARCHAR(MAX);

    SET @Req_View_Name = @ViewName

    SET @sql = '
            CREATE VIEW [Req_View_Name]
            As 
            BEGIN
            Select [Reviewer], Count([Reviewer]) as Total_Requests From [dbo].[reviews_not_sent] where [BU] = @RequiredBU  Group By [Reviewer];
            END
            '
            SET @sql = REPLACE(@sql, '[Req_View_Name]', QUOTENAME(@Req_View_Name));

               EXEC sp_executesql @sql,
                           N'@RequiredBU VARCHAR(50)',@RequiredBU=@RequiredBU
        END;

EXEC sp_businessUnit_totalRequests 'Annuities_Requests', 'Annuities';

Хранимая процедура создается. Но когда я пытался выполнить хранимую процедуру, он говорит:

Неверный синтаксис рядом с представлением

1 Ответ

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

Этот код должен работать:

ALTER PROCEDURE [dbo].[sp_businessUnit_totalRequests] 
                (
                @ViewName AS VARCHAR(50),
                @RequiredBU AS VARCHAR(50)
                )
    AS
    BEGIN

        Declare @Req_View_Name AS SYSNAME;
        DECLARE @sql NVARCHAR(MAX);

        Set @Req_View_Name = @ViewName

        set @sql = '
        CREATE VIEW [Req_View_Name]
        As 
        Select [Reviewer], Count([Reviewer]) as Total_Requests From [dbo].[reviews_not_sent] where [BU] = ''' + @RequiredBU + '''  Group By [Reviewer];
        '
        SET @sql = REPLACE(@sql, '[Req_View_Name]', QUOTENAME(@Req_View_Name));

           EXEC sp_executesql @sql

    END;

Этот код работает, хотя он страдает от SQL-инъекций. Параметризованное создание SQL View невозможно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...