SQL Server - проблема с передачей переменной в хранимую процедуру - PullRequest
0 голосов
/ 12 марта 2012

Я знаю, что это основной вопрос, но я не могу придумать правильный способ сделать это.

Мне нужно передать переменную в хранимую процедуру SQL Server 2008 и вернуть запрос.

Вот хранимая процедура:

CREATE PROCEDURE pOrders
AS
    DECLARE @enteredClientID varchar(20);
    DECLARE @Results table (ClientID varchar(20), Num_orders int);
BEGIN
    SET NOCOUNT ON;

    -- Get all the order from the client
    INSERT INTO @Results
      SELECT ClientID, sum(Num_orders)
      FROM Orders O
      WHERE O.ClientID = @enteredClientID
      GROUP BY O.ClientID);

    -- Insert the orders into the results table --
    SELECT *
    FROM @Results;

END
GO;

Теперь я бы выполнил хранимую процедуру и вернул результат:

exec pOrders
set @enteredClientID = 'ABC123456789'

Я получил это сообщение об ошибке:

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

Но я объявляю переменную .... что мне не хватает?

Ответы [ 3 ]

2 голосов
/ 12 марта 2012

Вы объявили не параметр, а локальную переменную. Чтобы объявить это так, как вы хотели:

CREATE PROCEDURE pOrders (@enteredClientID varchar(20))
AS
    DECLARE @Results table (ClientID varchar(20), Num_orders int);

    SET NOCOUNT ON;

    -- Get all the order from the client
    INSERT INTO @Results
    SELECT ClientID, sum(Num_orders)
    FROM Orders O
    WHERE O.ClientID = @enteredClientID
    GROUP BY O.ClientID);

    -- Insert the orders into the results table --
    SELECT *
    FROM @Results;

GO;

Можно назвать это:

exec pOrders @enteredClientID = 'ABC123456789'

или просто

exec pOrders 'ABC123456789'
1 голос
/ 12 марта 2012

- В сохраненной процедуре

DECLARE @enteredClientID varchar(20) OUTPUT

- Затем вставьте и установите идентификатор

SELECT SCOPE_IDENTITY() AS @enteredClientID

- При вызове процедуры: - ОБЪЯВЛЯЙТЕ переменные для хранения возвращаемого значения

DECLARE @enteredClientID VARCHAR(20);

- выполнить процедуру, которая возвращает значение.

EXEC @enteredClientID = pOrders
0 голосов
/ 12 марта 2012

Попробуйте EXEC pOrders 'ABC123456789'.

Вызов, который вы предоставили, пытается выполнить процедуру (без параметров), затем пытается установить переменную с именем @enteredClientID.Поскольку вы не объявили @enteredClientID в области действия исполняемого кода, он не может его установить.

Для получения дополнительной информации о том, как использовать параметры с процедурами, эта статья может быть полезна: http://msdn.microsoft.com/en-us/library/ms189915.aspx

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