Форум программистов, компьютерный форум, киберфорум
Microsoft SQL Server
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
gorez

SQL Server Stored Procedure

07.05.2008, 12:44. Показов 1775. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Народ, подскажите, почему не возвращаются данные из хранимой процедуры(возвращаться ведь должна переменная @out):
T-SQL
1
2
3
4
5
6
7
create procedure proc1 (@_name char)
as
declare
@out integer 
begin
select @out=count(*) from tab1 where name=@_name
end
Процедуру регистрировал через DataEnvironment, и что за ошибка:
Procedure 'proc1' expects parameter '@_name', which was not supplied
Есть ли другой способ вызывать хранимую процедуру, которая бы возвращала данные?
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
07.05.2008, 12:44
Ответы с готовыми решениями:

VB + MS SQL Server 7 + Stored procedures (+++)
Как возвращить данные из Хранимых процедур и использовать их в VB ?

Stored Procedure
Решил поучить ADO.NET по Троелсену, в SQL Server Management Studio создал БД "AutoLot" и добавил таблицу "Invertory" с 4...

Stored Procedure
Народ, подскажите, почему не возвращаются данные из хранимой процедуры(возвращаться ведь должна переменная @out): create procedure proc1...

9
3 / 3 / 1
Регистрация: 06.11.2007
Сообщений: 75
12.05.2008, 18:10
Для начала. Если переменная объявлена в теле процедуры, то она никогда не будет возвращаться.
Во-вторых, у MS SQL у процедур есть только код возврата и он типа int.

Для того чтобы получить что-то от процедуры надо либо напрямую написать select, лучше всего в конце процедуры, тогда получишь стандартный DataSet, либо, что гораздо правильнее, определить параметр типа output см. Help.

В-третьих, параметры процедуры у MS SQL не заключаются в скобки.

Вот пример:
T-SQL
1
2
3
4
5
CREATE PROCEDURE proc1 @name varchar(30), @res varchar output
AS
BEGIN
 @res = select <field> top 1 from <table> where <field2>=@name
END
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. Это не работает
T-SQL
1
2
3
4
5
CREATE PROCEDURE proc1 @name varchar(30), @res varchar(30) output
AS
BEGIN 
@res = select <field> top 1 from <table> where <field2>=@name
END
3.
T-SQL
1
2
3
4
CREATE PROCEDURE proc1 @name varchar(30), @res varchar(30) output
AS
BEGIN select @res=<field> top 1 from <table> where <field2>=@name
END
Это работает(при гарантии, что @res не множество, а единственное значение), но по команде
T-SQL
1
exec proc1 <'значение'>,''
опять же не возвращает никаких значений (даже вместе с return @res)

Попробуй, если не сложно, сам написать это все в 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 параметра обязательно должна быть переменная:
T-SQL
1
2
3
declare @r varchar (30)
exec proc1 'la-la-la', @r
select @r
либо вместо этого можно в самой процедуре написать select @res. Но тогда нет смысла объявлять @res как параметр процедуры. Достаточно объявить его просто как переменную внутри процедуры.
0
gorez
19.05.2008, 16:21
Спасибо, немного понятней, только ты же говорил, что если переменная объявлена в теле процедуры, то она никогда не будет возвращаться.
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.05.2008, 16:21
Помогаю со студенческими работами здесь

Просмотр Stored Procedure
Как запросом просмотреть содержимое(source) Stored Procedure?

SELECT in Stored Procedure
U menya takaya problema: est' tablica 10,000,000 zapisey s clasternim index-om, imeetsya khranimaya procedura v kotoruu peredautsya...

Неполадка по stored procedure
Работа в базе данных Northwind. Нужно создать процедуру, которая получит код покупателя из Customers как входной параметр, и возвратит...

Could not find stored procedure
Error Code = 80040e14 Code meaning = I Source = Microsoft OLE DB Provider for ODBC Drivers Description = Could not find stored...

Could not find stored procedure 'c'
Доброго времени суток. Можете помочь и тыкнуть лицом в ошибку? При обращении к хранимой процедуре uspCreateInOut выдается ошибка...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
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
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru