Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Передача в хранимую процедуру нескольких значений  [new]
denisk87
Member

Откуда:
Сообщений: 3
ошибка: Сообщение 512, уровень 16, состояние 1, строка 6
Вложенный запрос вернул больше одного значения. Это запрещено, когда вложенный запрос следует после =, !=, <, <=, >, >= или используется в качестве выражения.

Здравствуйте!
Есть хранимая процедура dbo.add. Она нужна для добавления объектов в БД. Если я вручную присваиваю значения, то все ок! Но у меня задача добавить много объектов из другой таблицы [test_01].[town].[test1] , где есть значения для @ID и @Value.
Попытался объявить переменную, но ошибка.

Подскажите как правильно реализовать???

Вот запрос:

USE [test]
GO

DECLARE @return_value int

DECLARE @ID_f int = (SELECT [id] FROM [test_01].[town].[test1])

EXEC @return_value = [dbo].[Add]
@ID = @ID_f,
@Value = 200,

SELECT 'Return Value' = @return_value

GO
18 ноя 15, 09:50    [18433517]     Ответить | Цитировать Сообщить модератору
 Re: Передача в хранимую процедуру нескольких значений  [new]
Glory
Member

Откуда:
Сообщений: 104751
denisk87
ошибка: Сообщение 512, уровень 16, состояние 1, строка 6
Вложенный запрос вернул больше одного значения. Это запрещено, когда вложенный запрос следует после =, !=, <, <=, >, >= или используется в качестве выражения.

И вы уже посмотрели, какая конкретно команда у вас находится в "строка" 6 ?
18 ноя 15, 09:55    [18433549]     Ответить | Цитировать Сообщить модератору
 Re: Передача в хранимую процедуру нескольких значений  [new]
Gena928
Member

Откуда: Москва
Сообщений: 1139
denisk87,

Вот это:
Вложенный запрос вернул больше одного значения. Это запрещено, когда вложенный запрос следует после =, !=, <, <=, >, >= или используется в качестве выражения.

Означает что вот это:
SELECT [id] FROM [test_01].[town].[test1]

вернуло больше одной строки. Поставьте туда top(1)
SELECT top(1) [id] FROM [test_01].[town].[test1]

Но тут надо иметь ввиду сортировку. Т.е. какая запись вам нужна? Первая или последняя? Если первая то order by .... А если последняя, то order by.... desc.
18 ноя 15, 09:55    [18433550]     Ответить | Цитировать Сообщить модератору
 Re: Передача в хранимую процедуру нескольких значений  [new]
Glory
Member

Откуда:
Сообщений: 104751
denisk87
Но у меня задача добавить много объектов из другой таблицы [test_01].[town].[test1] , где есть значения для @ID и @Value.

Это делается так
INSERT mytable(ID, Value)
SELECT ID, Value FROM [test_01].[town].[test1]
18 ноя 15, 10:05    [18433625]     Ответить | Цитировать Сообщить модератору
 Re: Передача в хранимую процедуру нескольких значений  [new]
denisk87
Member

Откуда:
Сообщений: 3
Нужно добавить много записей не напрямую в таблицу, а через хранимую процедуру!!!
18 ноя 15, 10:08    [18433640]     Ответить | Цитировать Сообщить модератору
 Re: Передача в хранимую процедуру нескольких значений  [new]
Glory
Member

Откуда:
Сообщений: 104751
denisk87
Нужно добавить много записей не напрямую в таблицу, а через хранимую процедуру!!!

И как вы себе представляете хранение таблицы в простой переменной ?
18 ноя 15, 10:12    [18433670]     Ответить | Цитировать Сообщить модератору
 Re: Передача в хранимую процедуру нескольких значений  [new]
denisk87
Member

Откуда:
Сообщений: 3
Glory,DECLARE @ID_f int = (SELECT [id] FROM [test_01].[town].[test1])
18 ноя 15, 10:13    [18433677]     Ответить | Цитировать Сообщить модератору
 Re: Передача в хранимую процедуру нескольких значений  [new]
Glory
Member

Откуда:
Сообщений: 104751
denisk87
Glory,DECLARE @ID_f int = (SELECT [id] FROM [test_01].[town].[test1])

Офигеть !
И как же физически в этой переменной поместятся все записи из таблицы ?

Сообщение было отредактировано: 18 ноя 15, 10:14
18 ноя 15, 10:14    [18433688]     Ответить | Цитировать Сообщить модератору
 Re: Передача в хранимую процедуру нескольких значений  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31964
denisk87
Glory,DECLARE @ID_f int = (SELECT [id] FROM [test_01].[town].[test1])

@ID_f - это переменная типа "целое число", для неё выделяется 32 бита (4 байта) в памяти.
Любая переменная может хранить только одно значение того типа, которым она объявлена.

Вам нужно сделать переменную типа "таблица". В этой переменной будет тоже одно значение данного типа - но этот тип будет "таблица", а в таблицах можно хранить множество записей, а не одно число.
В эту переменную уже можно будет записать результат вашего запроса "SELECT [id] FROM [test_01].[town].[test1]", и передать эту переменную в процедуру.

PS вам бы нужно программирование начать осваивать, раз вы этим начали заниматься. Это как бы совсем основы, сейчас это в школе изучают.
Не очень продуктивно писать код на SQL, если вы не знаете понятия "переменная", "байт" и т.п.
18 ноя 15, 10:20    [18433738]     Ответить | Цитировать Сообщить модератору
 Re: Передача в хранимую процедуру нескольких значений  [new]
xenix
Guest
В такой ситуации курсор рулит
18 ноя 15, 10:33    [18433823]     Ответить | Цитировать Сообщить модератору
 Re: Передача в хранимую процедуру нескольких значений  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
xenix
В такой ситуации курсор рулит
Диверсия!
18 ноя 15, 10:36    [18433844]     Ответить | Цитировать Сообщить модератору
 Re: Передача в хранимую процедуру нескольких значений  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8821
автор
Она нужна для добавления объектов в БД

Вот это никого не смутило?
18 ноя 15, 11:20    [18434189]     Ответить | Цитировать Сообщить модератору
 Re: Передача в хранимую процедуру нескольких значений  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 34705
denisk87
DECLARE @ID_f int = (SELECT [id] FROM [test_01].[town].[test1])


Тебе надо изучать язык программирования TransactSQL.
C начала.
Конкретно тут тебе нужны курсоры и циклы.
18 ноя 15, 11:32    [18434272]     Ответить | Цитировать Сообщить модератору
 Re: Передача в хранимую процедуру нескольких значений  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31964
Владислав Колосов
автор
Она нужна для добавления объектов в БД

Вот это никого не смутило?
Да в сообщениях ТС всё смущает :-)

"Скажите когда выхожу из машины в ботинки попадает снег, поможет ли заменить на летнюю резину и чтоб компрессия увеличилась?"
18 ноя 15, 11:33    [18434278]     Ответить | Цитировать Сообщить модератору
 Re: Передача в хранимую процедуру нескольких значений  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31964
MasterZiv
Конкретно тут тебе нужны курсоры и циклы.
Тут непонятно, что нужно ТС.
Если ему нужно вызывать процедуру записи, которая "чёрный ящик", то правильно, нужно учить курсоры и циклы.
Если нужно самому сделать процедуру записи, то лучше учить табличные параметры, и, возможно, передачу табличных параметров с клиента.
18 ноя 15, 11:40    [18434333]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить