|
gorez
|
||||||
SQL Server Stored Procedure07.05.2008, 12:44. Показов 1775. Ответов 9
Метки нет (Все метки)
Народ, подскажите, почему не возвращаются данные из хранимой процедуры(возвращаться ведь должна переменная @out):
Procedure 'proc1' expects parameter '@_name', which was not supplied Есть ли другой способ вызывать хранимую процедуру, которая бы возвращала данные? |
||||||
| 07.05.2008, 12:44 | |
|
Ответы с готовыми решениями:
9
VB + MS SQL Server 7 + Stored procedures (+++) Stored Procedure Stored Procedure |
|
3 / 3 / 1
Регистрация: 06.11.2007
Сообщений: 75
|
||||||
| 12.05.2008, 18:10 | ||||||
|
Для начала. Если переменная объявлена в теле процедуры, то она никогда не будет возвращаться.
Во-вторых, у MS SQL у процедур есть только код возврата и он типа int. Для того чтобы получить что-то от процедуры надо либо напрямую написать select, лучше всего в конце процедуры, тогда получишь стандартный DataSet, либо, что гораздо правильнее, определить параметр типа output см. Help. В-третьих, параметры процедуры у MS SQL не заключаются в скобки. Вот пример:
0
|
||||||
|
gorez
|
|
| 13.05.2008, 16:01 | |
|
1.
Не работает ( Error 170: Incorrect syntax near '@res' 2. Кстати, что такое top 1 ? 3. Если писать select @res=<field1> from scl_move where ........ ошибок не дает, но не выводит ланные 4. может return @res ? что делать??? |
|
|
3 / 3 / 1
Регистрация: 06.11.2007
Сообщений: 75
|
|
| 13.05.2008, 16:26 | |
|
Ошибка, потому что я забыл написать размер varchar (см. первый аргумент) должно быть varchar(30).
можно написать return @res, но только если @res типа integer и тогда не надо делать его аргументом, т.е. просто объявить в теле процедуры, как у тебя было с самого начала. top 1 значит взять только первую запись: Например, есть таблица tab1: f1 f2 1 a 2 b 3 b 4 c если написать: select * from tab1 where f2='b', то получиться: 2 b 3 b а если: select top 1 * from tab1 where f2='b', то: 2 b нафига это надо: если написать select @res=(select f2 from tab1 where f2='b'), то будет ошибка, т.к. @res - есть скалярная переменная, а то что ему присваивается - множество. Поэтому так можно писать только если ты совершенно уверен, что возвратиться только одна запись, т.е. все записи уникальны по выбираемому полю.
0
|
|
|
gorez
|
||||||||||||||||
| 13.05.2008, 20:00 | ||||||||||||||||
|
Все равно
@res = select <field> top 1 from <table> where <field2>=@name не работает, хоть varchar, хоть varchar(30) если убрать output у переменной @res, то работает, но тогда это уже не возвращаемая переменная Давай разберемся 1. Мне нужно возвратить данные типа varchar, значит объявлять @res в теле программы - не подходит 2. Это не работает
Попробуй, если не сложно, сам написать это все в SQL Server, хочеться все таки разобраться наконец. Спасибо. |
||||||||||||||||
|
gorez
|
|
| 14.05.2008, 10:28 | |
|
может дело в версии SQL Server, у меня она 7.0, но все равно должно как то работать..?!
|
|
|
3 / 3 / 1
Регистрация: 06.11.2007
Сообщений: 75
|
|
| 14.05.2008, 10:55 | |
|
Хорошо. Для начала давай определимся, с чем ты пользуешься со стороны клиента, т.е. это просто Query Analayzer или это какая-то среда разработки или просто еще какой-нить клиент?
В обычном клиенте (интерактивном) обычно возвращаемые параметры процедуры не отображаются. Чтобы их увидеть нужно просто в конце нашей процедуры написать select @res. Различные среды разработки (по разному) позволяют получить эти переменные. Но смысл обычно один: Процедура представляется в виде класса (компонента, etc.) У которого есть возможность определять параметры этой процедуры. Собственно в этих переменных-параметрах и передаются и возвращаются значения.
0
|
|
|
gorez
|
|
| 19.05.2008, 10:21 | |
|
Привет, отвечаю на вопрос, у меня Query Analyzer.
То есть он ничего и не выдаст? CREATE PROCEDURE proc1 @name varchar(30), @res varchar output означает, что надо при вызове процедуры указывать два параметра? что же мне указывать вместо @res, если мне ее нужно только возвратить? |
|
|
3 / 3 / 1
Регистрация: 06.11.2007
Сообщений: 75
|
||||||
| 19.05.2008, 15:59 | ||||||
|
Совершенно верно. @res не будет отображаться. А в качестве output параметра обязательно должна быть переменная:
0
|
||||||
|
gorez
|
|
| 19.05.2008, 16:21 | |
|
Спасибо, немного понятней, только ты же говорил, что если переменная объявлена в теле процедуры, то она никогда не будет возвращаться.
|
|
| 19.05.2008, 16:21 | |
|
Помогаю со студенческими работами здесь
10
Просмотр Stored Procedure SELECT in Stored Procedure Неполадка по stored procedure Could not find stored procedure Could not find stored procedure 'c' Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
|
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма).
На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
|
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ *
Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам
Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
|
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым.
Но восстановить их можно так.
Для этого понадобится консольная утилита. . .
|
|
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
|
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11
— это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
|
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11
Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
|
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
|