Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Не работает TRIGGER....(1:C - SQL)  [new]
K_Naumov
Member

Откуда:
Сообщений: 54
1:C - SQL

Для сохранения даты изменения записи (таблица контрагентов) написал триггер
AFTER UPDATE,INSERT
который заносит дату изменения записи в другую таблицу.

Но при редактировании записи в 1:С возникает ошибка [ODBC] "Подключение занято до получения результатов другого hstmt"

Может эту задачу еще как-то можно решить ?
26 июл 04, 12:13    [834477]     Ответить | Цитировать Сообщить модератору
 Re: Не работает TRIGGER....(1:C - SQL)  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
А текст триггера можно увидеть?
26 июл 04, 12:14    [834486]     Ответить | Цитировать Сообщить модератору
 Re: Не работает TRIGGER....(1:C - SQL)  [new]
K_Naumov
Member

Откуда:
Сообщений: 54
Вот такой триггерочек...


CREATE TRIGGER SC96_UPDATE_INSERT
ON SC96
AFTER UPDATE, INSERT
AS

DECLARE @rowID char(9)

SELECT @rowID = upd.[ID] FROM inserted upd;

SET NOCOUNT OFF

IF( EXISTS(SELECT [ID] FROM UPDATE_SC96 WHERE ([ID] = @rowID)) )

UPDATE UPDATE_SC96
SET
[ID] = @rowID,
[IS_DELETED] = 0,
[D_UPDATE] = GETDATE()
WHERE ([ID] = @rowID);

ELSE

INSERT INTO UPDATE_SC96 (
[ID],
[IS_DELETED],
[D_CREATE],
[D_UPDATE]
)
VALUES (
@rowID,
0,
GETDATE(),
GETDATE()
)

SET NOCOUNT ON

GO
26 июл 04, 12:20    [834508]     Ответить | Цитировать Сообщить модератору
 Re: Не работает TRIGGER....(1:C - SQL)  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37100
а) set nocount on в начало
б) интересно, как отработает Ваш триггер при пакетных изменениях(когда в inserted более, чем одна запись)?
26 июл 04, 12:22    [834517]     Ответить | Цитировать Сообщить модератору
 Re: Не работает TRIGGER....(1:C - SQL)  [new]
K_Naumov
Member

Откуда:
Сообщений: 54
Спасибо за ответ !

По-поводу пакетных изменений
Придется добавить еще "пару" строк, но это для меня пока не принципиально.
26 июл 04, 12:24    [834522]     Ответить | Цитировать Сообщить модератору
 Re: Не работает TRIGGER....(1:C - SQL)  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
Всё что можно было испортить - испорчено...FAQ.
Триггер надо переписать исходя из того предположения, что изменяться и вставляться может несколько строк, а не одна...
26 июл 04, 12:25    [834525]     Ответить | Цитировать Сообщить модератору
 Re: Не работает TRIGGER....(1:C - SQL)  [new]
K_Naumov
Member

Откуда:
Сообщений: 54
Кстати, а 1:С - SQL делает пакетные изменения ?
26 июл 04, 12:26    [834530]     Ответить | Цитировать Сообщить модератору
 Re: Не работает TRIGGER....(1:C - SQL)  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
K_Naumov
Кстати, а 1:С - SQL делает пакетные изменения ?
А не надо полагаться на то, что клиент будет изменять по одной строке, и писать сразу для пакетных операций.
26 июл 04, 12:28    [834540]     Ответить | Цитировать Сообщить модератору
 Re: Не работает TRIGGER....(1:C - SQL)  [new]
K_Naumov
Member

Откуда:
Сообщений: 54
Ок, сейчас проверю...
26 июл 04, 12:33    [834553]     Ответить | Цитировать Сообщить модератору
 Re: Не работает TRIGGER....(1:C - SQL)  [new]
K_Naumov
Member

Откуда:
Сообщений: 54
Чего-то не работает мой триггер, может подскажете где собака зарыта ?

"Another user modified the contenst of the table; the database row you are modifyng longen exists in database"
Database error: Invalid column name 'ID'

CREATE TRIGGER SC96_UPDATE_INSERT
ON SC96
AFTER UPDATE, INSERT
AS

DECLARE @rowID char(9)

SET NOCOUNT ON

-- SELECT @rowID = upd.[ID] FROM inserted upd;
SELECT upd.[ID] as gen into #tmp_gen FROM inserted upd;

DECLARE id_cursor CURSOR
FOR
SELECT [ID]
FROM #tmp_gen
OPEN id_cursor

FETCH NEXT FROM id_cursor INTO @rowID
WHILE (@@FETCH_STATUS <> -1)
BEGIN

begin tran

IF( EXISTS(SELECT [ID] FROM UPDATE_SC96 WHERE ([ID] = @rowID)) )
UPDATE UPDATE_SC96
SET
[ID] = @rowID,
[IS_DELETED] = 0,
[D_UPDATE] = GETDATE()
WHERE ([ID] = @rowID);
ELSE
INSERT INTO UPDATE_SC96 (
[ID],
[IS_DELETED],
[D_CREATE],
[D_UPDATE]
)
VALUES (
@rowID,
0,
GETDATE(),
GETDATE()
)


commit tran


FETCH NEXT FROM id_cursor INTO @rowID

END

CLOSE id_cursor

DEALLOCATE id_cursor


SET NOCOUNT OFF

GO
26 июл 04, 12:55    [834616]     Ответить | Цитировать Сообщить модератору
 Re: Не работает TRIGGER....(1:C - SQL)  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
CREATE TRIGGER SC96_UPDATE_INSERT
ON SC96
AFTER UPDATE, INSERT 
AS 
SET NOCOUNT ON
UPDATE u SET [ID] = @rowID,
		[IS_DELETED] = 0,
		[D_UPDATE] = GETDATE()
		from UPDATE_SC96 u join
		inserted i on u.[ID] = i.[ID]
if @@error<> 0
	begin
		rollback tran
		return 1
	end
INSERT INTO UPDATE_SC96 ([ID],
			[IS_DELETED],
			[D_CREATE],
			[D_UPDATE])
		select [ID],
			[IS_DELETED],
			GETDATE(),
			GETDATE()
			from inserted i
			where not exists(select * from UPDATE_SC96
						where [ID] = i.[ID])
if @@error<> 0
	begin
		rollback tran
		return 1
	end
GO
26 июл 04, 13:04    [834666]     Ответить | Цитировать Сообщить модератору
 Re: Не работает TRIGGER....(1:C - SQL)  [new]
K_Naumov
Member

Откуда:
Сообщений: 54
Спасибо !!!

Раньше работал с Interbase там все проще...
26 июл 04, 13:15    [834710]     Ответить | Цитировать Сообщить модератору
 Re: Не работает TRIGGER....(1:C - SQL)  [new]
Локшин Марк
Member

Откуда: Воронеж
Сообщений: 3154
Кстати, в 1С есть штатный журнал регистрации изменений, так что если с базой работают только из 1С, то можно воспользоваться им.
26 июл 04, 14:41    [835090]     Ответить | Цитировать Сообщить модератору
 Re: Не работает TRIGGER....(1:C - SQL)  [new]
Bulratym
Member

Откуда:
Сообщений: 92
а вообще лучше в 1С часть базы свои тригеры не вешать
или продумать процедуру их удаления-восстановления,
иначе при переводе активной точки в 1С-се , когда он сам както проводит переиндексацию sql части
может не отработать эта процедура или попросту затереться все чужеродные объекты - типа тригерров...
26 июл 04, 16:56    [835746]     Ответить | Цитировать Сообщить модератору
 Re: Не работает TRIGGER....(1:C - SQL)  [new]
K_Naumov
Member

Откуда:
Сообщений: 54
Спасибо за обсуждение, ваши советы мне действительно помогли.
26 июл 04, 17:32    [835925]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить