imho.ws |
![]() |
![]() |
![]() |
# 1 |
Junior Member
Регистрация: 10.10.2003
Адрес: Москва
Сообщения: 136
![]() ![]() ![]() ![]() |
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). |
![]() |
![]() |
# 4 | |
Guest
Сообщения: n/a
|
![]() Цитата:
надо типа так: use [<Имя базы>] go declare @datenow smalldatetime set @datenow = getdate() exec dbo.GetTotalTime(MWDB.ID,DATEADD(Mm,-1,@datenow),DATEADD(Dd,-1,@datenow)) |
|
![]() |
# 5 |
Member
Регистрация: 26.09.2005
Адрес: Питер
Сообщения: 336
![]() ![]() |
Мне по курсовику надо написать много триггеров для 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. Причина: орфография |
![]() |
![]() |
# 6 |
Advanced Member
Регистрация: 15.09.2004
Адрес: Украина, Хмельницкий
Сообщения: 403
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Kvarx, так как инсерт уже произошел, то @article_id у тебя будет всегда равна только что вставленой записи.
Если надо обезательно триггером, то исспользуй INSTEAD OF INSERT, и сам вручную вставляй после проверки. Ну а если по доброму это делать, то надо уникальный индекс построить по полю name без всяких триггеров ![]()
__________________
The man in black fled across the desert, and the Gunslinger followed. (c) S.King |
![]() |
![]() |
# 7 | |
Member
Регистрация: 26.09.2005
Адрес: Питер
Сообщения: 336
![]() ![]() |
Цитата:
Разобрался с триггерами, сделал вот так: Код:
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) И можно ли передать как параметр массив значений? |
|
![]() |
![]() |
# 8 | |
Advanced Member
Регистрация: 15.09.2004
Адрес: Украина, Хмельницкий
Сообщения: 403
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Цитата:
Код:
CREATE PROCEDURE p_test_s AS DECLARE @arg1 int set @arg1 = 1 DECLARE @arg2 nvarchar(256) set @arg2 ='string here' select @arg1, @arg2 GO http://www.sql.ru/subscribe/2003/146.shtml#9 Лично мне было нужно только несколько раз, я исспользовал строку, которую потом парсил и составлял из нее таблицу.
__________________
The man in black fled across the desert, and the Gunslinger followed. (c) S.King |
|
![]() |
![]() |
# 9 |
Member
Регистрация: 26.09.2005
Адрес: Питер
Сообщения: 336
![]() ![]() |
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. |
![]() |
![]() |
# 10 | |
мод
IMHO Кодер-200(6,7,8) Регистрация: 29.03.2003
Адрес: Saint-Petersburg, Russia
Пол: Male
Сообщения: 2 734
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Цитата:
Часто (в достаточно простых случаях правда) заменить можно ограничениями на значения и модификацией данных только из хранимых процедур, с проверками в них.
__________________
Я делаю Линукс! Присоединяйтесь к свободным людям! Связаться со мной всегда можно по джабберу: Hubbitus@jabber.ru Pahan-Hubbitus. |
|
![]() |