imho.ws
IMHO.WS  

Вернуться   IMHO.WS > Компьютеры > Программирование
Опции темы
Старый 01.06.2005, 16:00     # 1
TRiPLE
Junior Member
 
Аватар для TRiPLE
 
Регистрация: 10.10.2003
Адрес: Москва
Сообщения: 136

TRiPLE Реально крут(а)TRiPLE Реально крут(а)TRiPLE Реально крут(а)TRiPLE Реально крут(а)
MSSQL. Stored procedures

Тут такая проблемка. Есть сабжевый сервер. Через Enterprise Manages создал там процедуру для базы. Обозвал, допустим, GetTotalTime. В процедуре три параметра. Проверку она прошла и сохранилась.
Теперь вот пытаюсь использовать её, а мне queryBuilder отвечает, что неизвестная процедура и все тут. Может, я что-то не так делаю с её вызовом? Первый раз пользую процедуры, так что не до конца понимаю суть проблемы... Уже битый час читаю хелп и книжку.
Примерный текст:
Код:
CREATE PROCEDURE dbo.GetTotalTime 
(
@ID int,
@MinDate smalldatetime,
@MaxDate smalldatetime
)
AS
...
Вывзываю примерно так:
Код:
GetTotalTime(MWDB.ID,DATEADD(Mm,-1,GETDATE()),DATEADD(Dd,-1,GETDATE()))
Чё делать?
__________________
"Самое великое достижение Америки - каждый должен голосовать".
- Джордж Буш Мл.(Остин, 08.12.00).
TRiPLE вне форума  
Старый 01.06.2005, 16:42     # 2
ЕЖ
::VIP::
 
Регистрация: 19.03.2004
Сообщения: 1 329

ЕЖ Бог с наворотамиЕЖ Бог с наворотами
ЕЖ Бог с наворотамиЕЖ Бог с наворотами
Обычно пишут так:
EXEC <имя процедуры> <параметры>
Всё через пробелы.

Ещё проверь в Query Analyzer в верху в выпадающем списке чтобы была твоя база, а не какая-нибудь master.

Почитай Book Online, там всё хорошо описано.
ЕЖ вне форума  
Старый 02.06.2005, 17:00     # 3
knight
Junior Member
 
Регистрация: 12.09.2004
Сообщения: 106

knight Известность не заставит себя ждатьknight Известность не заставит себя ждать
Также можно написать так:
use имя_базы
exec имя_процедуры аргументы

Где имя_базы это та база где должна храниться процедура
knight вне форума  
Старый 10.06.2005, 11:42     # 4
Dolphin_spb
Guest
 
Сообщения: n/a

Exclamation

Цитата:
Сообщение от TRiPLE
Тут такая проблемка. Есть сабжевый сервер. Через Enterprise Manages создал там процедуру для базы. Обозвал, допустим, GetTotalTime. В процедуре три параметра. Проверку она прошла и сохранилась.
Теперь вот пытаюсь использовать её, а мне queryBuilder отвечает, что неизвестная процедура и все тут. Может, я что-то не так делаю с её вызовом? Первый раз пользую процедуры, так что не до конца понимаю суть проблемы... Уже битый час читаю хелп и книжку.
Примерный текст:
Код:
CREATE PROCEDURE dbo.GetTotalTime 
(
@ID int,
@MinDate smalldatetime,
@MaxDate smalldatetime
)
AS
...
Вывзываю примерно так:
Код:
GetTotalTime(MWDB.ID,DATEADD(Mm,-1,GETDATE()),DATEADD(Dd,-1,GETDATE()))
Чё делать?
Да млин нельзя в параметры процедуры вставлять системыные функции!!!
надо типа так:
use [<Имя базы>]
go
declare @datenow smalldatetime
set @datenow = getdate()

exec dbo.GetTotalTime(MWDB.ID,DATEADD(Mm,-1,@datenow),DATEADD(Dd,-1,@datenow))
 
Старый 10.04.2007, 13:24     # 5
Kvarx
Member
 
Регистрация: 26.09.2005
Адрес: Питер
Сообщения: 336

Kvarx Известность не заставит себя ждатьKvarx Известность не заставит себя ждать
Мне по курсовику надо написать много триггеров для MSSQL Server 2005 EE. Начал с самого простого, но не получается. Есть табличка:
Код:
CREATE TABLE [dbo].[articles](
	[iid] [int] IDENTITY(1,1) NOT NULL,
	[name] [varchar](50) COLLATE Cyrillic_General_CI_AS NULL,
(
А триггер такой написал:
Код:
CREATE TRIGGER trigger1 ON dbo.articles
AFTER INSERT
AS
DECLARE @article_id int
select @article_id = 0
SELECT TOP 1 @article_id = A.iid FROM dbo.articles A, inserted i WHERE A.name = i.name
IF @article_id > 0
BEGIN
	RAISERROR ('MyError', 16,1)
	ROLLBACK TRANSACTION
END 
GO
Чтоб одинаковые строки не добавлять. Он срабатывает теперь для любого инсерта.

Последний раз редактировалось Kvarx; 10.04.2007 в 13:24. Причина: орфография
Kvarx вне форума  
Старый 12.04.2007, 20:35     # 6
Gunslinger
Advanced Member
 
Аватар для Gunslinger
 
Регистрация: 15.09.2004
Адрес: Украина, Хмельницкий
Сообщения: 403

Gunslinger Имеются все основания чтобы гордиться собойGunslinger Имеются все основания чтобы гордиться собойGunslinger Имеются все основания чтобы гордиться собойGunslinger Имеются все основания чтобы гордиться собойGunslinger Имеются все основания чтобы гордиться собойGunslinger Имеются все основания чтобы гордиться собойGunslinger Имеются все основания чтобы гордиться собойGunslinger Имеются все основания чтобы гордиться собойGunslinger Имеются все основания чтобы гордиться собойGunslinger Имеются все основания чтобы гордиться собойGunslinger Имеются все основания чтобы гордиться собой
Kvarx, так как инсерт уже произошел, то @article_id у тебя будет всегда равна только что вставленой записи.
Если надо обезательно триггером, то исспользуй INSTEAD OF INSERT, и сам вручную вставляй после проверки.
Ну а если по доброму это делать, то надо уникальный индекс построить по полю name без всяких триггеров
__________________
The man in black fled across the desert, and the Gunslinger followed. (c) S.King
Gunslinger вне форума  
Старый 12.04.2007, 21:54     # 7
Kvarx
Member
 
Регистрация: 26.09.2005
Адрес: Питер
Сообщения: 336

Kvarx Известность не заставит себя ждатьKvarx Известность не заставит себя ждать
Цитата:
Сообщение от Gunslinger Посмотреть сообщение
Ну а если по доброму это делать, то надо уникальный индекс построить по полю name без всяких триггеров
Я б тоже так сделал, но структура базы задана преподом.

Разобрался с триггерами, сделал вот так:
Код:
ALTER TRIGGER [dbo].[trigger1] ON [dbo].[articles]
AFTER INSERT
AS
DECLARE @rowcount int
select @rowcount = 0
SELECT @rowcount = COUNT(A.iid) FROM dbo.articles A, inserted i WHERE A.name = i.name
IF @rowcount != 1
BEGIN
	RAISERROR ('MyError 50001. Article already exists.', 16, 1)
	ROLLBACK TRANSACTION
END
Теперь другой вопрос:
1) Вроде из процедуры можно вернуть значение только целого типа. Но в задании надо как-то вернуть строку, а в другом целых два значения
2) И можно ли передать как параметр массив значений?
Kvarx вне форума  
Старый 13.04.2007, 16:30     # 8
Gunslinger
Advanced Member
 
Аватар для Gunslinger
 
Регистрация: 15.09.2004
Адрес: Украина, Хмельницкий
Сообщения: 403

Gunslinger Имеются все основания чтобы гордиться собойGunslinger Имеются все основания чтобы гордиться собойGunslinger Имеются все основания чтобы гордиться собойGunslinger Имеются все основания чтобы гордиться собойGunslinger Имеются все основания чтобы гордиться собойGunslinger Имеются все основания чтобы гордиться собойGunslinger Имеются все основания чтобы гордиться собойGunslinger Имеются все основания чтобы гордиться собойGunslinger Имеются все основания чтобы гордиться собойGunslinger Имеются все основания чтобы гордиться собойGunslinger Имеются все основания чтобы гордиться собой
Цитата:
Сообщение от Kvarx Посмотреть сообщение
1) Вроде из процедуры можно вернуть значение только целого типа. Но в задании надо как-то вернуть строку, а в другом целых два значения
Так можно сделать:
Код:
CREATE PROCEDURE p_test_s

AS
	DECLARE @arg1 int
	set @arg1 = 1

	DECLARE @arg2 nvarchar(256)
	set @arg2 ='string here'

	select @arg1, @arg2
GO
Цитата:
Сообщение от Kvarx Посмотреть сообщение
2) И можно ли передать как параметр массив значений?
Почитай тут:
http://www.sql.ru/subscribe/2003/146.shtml#9

Лично мне было нужно только несколько раз, я исспользовал строку, которую потом парсил и составлял из нее таблицу.
__________________
The man in black fled across the desert, and the Gunslinger followed. (c) S.King
Gunslinger вне форума  
Старый 27.04.2007, 01:11     # 9
Kvarx
Member
 
Регистрация: 26.09.2005
Адрес: Питер
Сообщения: 336

Kvarx Известность не заставит себя ждатьKvarx Известность не заставит себя ждать
Gunslinger,
Очень помогло

Не подскажешь, почему триггеры в реальных проектах не особо применяются? И чем они заменяются?

Сам нашел обсуждение на эту тему:
_http://www.sql.ru/forum/actualthread.aspx?tid=10801&hl=%f2%f0%e8%e3%e3%e5%f0%fb

Последний раз редактировалось Kvarx; 27.04.2007 в 16:48.
Kvarx вне форума  
Старый 10.05.2007, 20:32     # 10
Hubbitus
мод
IMHO Кодер-200(6,7,8)
 
Регистрация: 29.03.2003
Адрес: Saint-Petersburg, Russia
Пол: Male
Сообщения: 2 734

Hubbitus Бог с наворотамиHubbitus Бог с наворотами
Hubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотами
Цитата:
Сообщение от Kvarx Посмотреть сообщение
Не подскажешь, почему триггеры в реальных проектах не особо применяются? И чем они заменяются?
Почему, применяются. Я и в реальных применяю, когда надо. Прежде всего, применяю их какраз для денормализации БД, и поддержки целостности данных.
Часто (в достаточно простых случаях правда) заменить можно ограничениями на значения и модификацией данных только из хранимых процедур, с проверками в них.
__________________
Я делаю Линукс! Присоединяйтесь к свободным людям!

Связаться со мной всегда можно по джабберу: Hubbitus@jabber.ru
Pahan-Hubbitus.
Hubbitus вне форума  


Ваши права в разделе
Вы НЕ можете создавать новые темы
Вы не можете отвечать в темах.
Вы НЕ можете прикреплять вложения
Вы НЕ можете редактировать свои сообщения

BB код Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +4, время: 01:06.




Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.