Я использую SQL Server 2012.Почему возникают ошибки при попытке запустить хранимую процедуру?
Мне нужно передать массив целых чисел в мою хранимую процедуру из Visual Studio. Мне нужно использовать переданный массив в пункте where
.
Для этой цели я создал table valued parameter
:
CREATE TYPE IdArray AS TABLE
(
Id int
);
А вот моя хранимая процедура:
ALTER PROCEDURE [dbo].[SP_TEST_TLP]
@List dbo.IdArray READONLY
AS
BEGIN
SET NOCOUNT ON;
SELECT *
FROM Clients
WHERE Clients.Id IN ('@List')
END
Но я стараюсь, чтобы запустить хранимую процедуру и передачи значений (некоторые целые числа) в казнить окно процедуры , Я получаю эту ошибку:
Must pass parameter number 2 and subsequent parameters as '@name = value'. After the form '@name = value' has been used, all subsequent parameters must be passed in the form '@name = value'.
UPDATE:
Вот как я вызвать хранимую процедуру:
DECLARE @return_value int
EXEC @return_value = [dbo].[SP_TEST_TLP]
@List = 1,6
SELECT 'Return Value' = @return_value
Любая идея, почему я получаю эту ошибку? Что я делаю не так?
Если вы хотите, чтобы мы указывали, что вы делаете неправильно, отправьте код, который вы используете, чтобы выполнить proc. Кроме того, не используйте 'sp_' в качестве префикса имени хранимой процедуры. Это обозначает хранимую процедуру системы SQL Server. Не прилагайте TVP котировки. Вместо этого укажите подзапрос, например 'SELECT id FROM @ List'. –
'Where Clients.Id IN ('@List')' не будет делать то, что вы хотите. Вы уже получили правильный синтаксис здесь http://stackoverflow.com/questions/40206849/why-i-get-error-when-i-try-to-create-stored-procedure –
Можете ли вы получить код, который выполняет процедуру окна производит? Окно процедуры выполнения использует синтаксис @name = value для вызова SP. Если вы просто записываете числа в виде запятой (1, 2, 3), то, скорее всего, это будет интерпретироваться как '@List = 1, 2, 3', и это не то, что вы хотите. – infiniteRefactor