Объявление PROCEDURE с переменной Dynami c на основе пользовательского ввода - PullRequest
0 голосов
/ 25 мая 2020
IF EXISTS ( SELECT *
    FROM INFORMATION_SCHEMA.ROUTINES WHERE SPECIFIC_SCHEMA = N'dbo'
    AND SPECIFIC_NAME = N'Reports'
    AND ROUTINE_TYPE = N'PROCEDURE')
    DROP PROCEDURE dbo.Reports        
GO

CREATE PROCEDURE dbo.Reports (@Date_of_Purchase DATE)
AS
BEGIN
    SELECT o.O_Id, o.Sale_Price, o.Private_Band, c.Type, c.Points_Issued, o.Date_of_Purchase
    FROM Order_Details o
    LEFT JOIN Transaction_Historys c ON o.Date_of_Purchase = c.Date_of_Purchase
    WHERE o.Date_of_Purchase > @Date_of_purchase
END
GO

EXECUTE dbo.Reports
GO

Хочу сделать o.Date_of_Purchase > DATEADD(d,@date,getdate()). @date должно быть динамически c значения на основе ввода пользователя, как объявить дни (@date) динамически.

Я получаю сообщение об ошибке при выполнении хранимой процедуры:

Необходимо объявить скалярную переменную

1 Ответ

0 голосов
/ 25 мая 2020

Вот как создать и запустить процедуру, которая принимает параметр для дней, добавляет эти дни к сегодняшней дате, а затем выполняет фильтрацию запроса по этой дате.

Главное, что вам нужно создать , инициализировать и передать параметры.

CREATE PROCEDURE dbo.Reports
(
    @Days INT
)
AS
BEGIN
    SET NOCOUNT ON;

    SELECT o.O_Id, o.Sale_Price, o.Private_Band, c.Type, c.Points_Issued, o.Date_of_Purchase
    FROM Order_Details o
    LEFT JOIN Transaction_Historys c ON o.Date_of_Purchase = c.Date_of_Purchase
    WHERE o.Date_of_Purchase > DATEADD(DAY, @Days, CURRENT_TIMESTAMP);

    RETURN 0;
END
GO

-- Create and initialise parameter.
DECLARE @Days INT = 90;

-- Execute SP, passing in our parameter
EXECUTE dbo.Reports @Days;
...