В запросе есть ошибка: FirstName
и LastName
являются избыточными.
SELECT @CustomerId = CustomerId
FROM Customers
Также я предполагаю, что в таблице «Клиенты» имеется более одного клиента.Таким образом, этот запрос вернет последний CustomerId, который, я полагаю, не тот, который вы хотите.Поэтому вам нужно добавить WHERE
условие или TOP 1
.
Примерно так:
CREATE PROCEDURE getCustomer (@CustomerId int OUTPUT)
AS
BEGIN
select @CustomerId = id
from Customer
where <SomeCondition>
END
[EDIT] Как вы утверждаете, что там ошибкаотсутствует в операторе SELECT
, он компилируется и работает нормально, вот доказательство.Пожалуйста, попробуйте этот код, он будет работать без проблем.
CREATE PROCEDURE getCustomer
(
@CustomerId int OUTPUT,
@CustomerName varchar(10) OUTPUT
)
AS
BEGIN
SELECT @CustomerId = 666, @CustomerName = 'Test'
END
GO
CREATE PROCEDURE getCustomer_and_more
AS
BEGIN
DECLARE @CustomerId int
DECLARE @CustomerName varchar(10)
EXEC getCustomer @CustomerId OUTPUT, @CustomerName OUTPUT
SELECT @CustomerId, @CustomerName
END
GO
EXEC getCustomer_and_more
Этот код вызывает вашу ошибку:
DECLARE @CustomerId int
SELECT @CustomerId = CustomerId, FirstName, LastName
FROM Customers
Это недопустимое утверждение SELECT
.Попробуйте этот код, и вы увидите точно такую же ошибку, как и в вопросе.