Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Вопрос чайника про триггеры и таблицу inserted  [new]
nvetal
Member

Откуда: Воронеж
Сообщений: 109
Пишу триггер на таблицу
CREATE TRIGGER DRIVERS_UI
   ON  Drivers
   AFTER INSERT,UPDATE
AS 
IF (UPDATE([Drivers.COCAR]))
BEGIN
	SET NOCOUNT ON;
	UPDATE Car2DriverLog SET UPTODATE=GETDATE() WHERE UPTODATE='25000101';
	INSERT INTO Car2DriverLog(COCAR,CODRIVER,FROMDATE,UPTODATE)
	SELECT ins.cocar, ins.codriver, GETDATE(), '25000101'  FROM   [dbo].[INSERTED] ins;
END

В таком виде триггер компилируется, но при сработке вываливатеся с ошибкой, что мол недопустимое имя объекта dbo.INSERTED
Если написать
SELECT ins.cocar, ins.codriver, GETDATE(), '25000101'  FROM   INSERTED ins;
Как в примерах с MSDN, то выдает

Сообщение 207, уровень 16, состояние 1, процедура DRIVERS_UI, строка 15
Недопустимое имя столбца "cocar".
В чем фишка?
6 янв 10, 15:48    [8152310]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос чайника про триггеры и таблицу inserted  [new]
Glory
Member

Откуда:
Сообщений: 104760
Просто INSERTED пишите. Без всяких dbo
И имена столбцов пишите правильно. Возможно с соблюдение регистра
6 янв 10, 15:55    [8152337]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос чайника про триггеры и таблицу inserted  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
nvetal,

1. не надо схему писать у inserted.
1a. лучше писать inserted маленькими буквами. Если COLLATE у базы регистрозависимый
и версия сервера не слишком новая, то писать можно только так.
Только начиная с какого-то CU не так давно это исправили.
2. что ожидается от почти бесполезной функции UPDATE()? Сдаётся мне, что не то, что она
делает на самом деле.

3. Что вернёт
SELECT DATABASEPROPERTYEX(N'ИмяБазы','Collation');
?
6 янв 10, 16:02    [8152351]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос чайника про триггеры и таблицу inserted  [new]
nvetal
Member

Откуда: Воронеж
Сообщений: 109
Код
SELECT ins.COCAR, ins.CODRIVER, GETDATE(), '25000101'  FROM   inserted ins;
Возвращает все то же
Сообщение 207, уровень 16, состояние 1, процедура DRIVERS_UI, строка 15
Недопустимое имя столбца "COCAR".
Сообщение 207, уровень 16, состояние 1, процедура DRIVERS_UI, строка 15
Недопустимое имя столбца "CODRIVER".

В этом варианте имена полей написаны с соблюдением регистра, и без имени схемы. Так что, увы не помогло.
В таблице DRIVERS для которой триггер, поля точно так и называются COCAR и CODRIVER
2. Эээ....Ожидается, что код будет отрабатывать только при изменении поля COCAR в таблице DRIVERS или при добавлении новой строки, и ингнорировать остальные изменения
3. Запрос возвращает Cyrillic_General_CI_AS
6 янв 10, 16:25    [8152429]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос чайника про триггеры и таблицу inserted  [new]
Glory
Member

Откуда:
Сообщений: 104760
А вы уверены, что процедура DRIVERS_UI, строка 15 - это именно строка с вашим insert/select-ом ?
6 янв 10, 16:35    [8152465]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос чайника про триггеры и таблицу inserted  [new]
tortoise
Member

Откуда: UK
Сообщений: 531
A вы имеете право писать в Car2DriverLog ?
6 янв 10, 16:37    [8152466]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос чайника про триггеры и таблицу inserted  [new]
Glory
Member

Откуда:
Сообщений: 104760
И что это за синтаксис UPDATE([Drivers.COCAR]) ?
Должно быть UPDATE(COCAR)
6 янв 10, 16:38    [8152469]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос чайника про триггеры и таблицу inserted  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
nvetal,

1. уверены, что буквы C, O, A, E везде английские (латинские)?
2. UPDATE() говорит только о том, что данное поле явно указано в списке SET команды UPDATE.
Даже если значение поля в некоторых записях не изменяются. Вам так и надо?
Пример:
UPDATE Drivers SET COCAR=COCAR;
3. Значит, для Вас регистр букв в названиях объектов безразличен.
6 янв 10, 16:39    [8152473]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос чайника про триггеры и таблицу inserted  [new]
nvetal
Member

Откуда: Воронеж
Сообщений: 109
Glory,
уверен. Во-первых, сверху еще комментарии идут, во вторых Managment Studio Express выделяет именно это строку.
По второму вопросу - если написать как предлагаете вы, то и в этом месте начинает выдаваться так же ошибка "Недопустимое имя столбца "COCAR".
tortoise, имею, но ошибка вываливается еще при компиляции
iap,
1. Перенабрал еще раз. Так же фигня
2. В принципе, да. В логе отразится, что машину у водителя поменяли, но на ту же-)
3. От этого не легче -(
Есть еще у кого мысли о причинах ошибки?
6 янв 10, 16:48    [8152504]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос чайника про триггеры и таблицу inserted  [new]
Glory
Member

Откуда:
Сообщений: 104760
nvetal
Glory,
уверен. Во-первых, сверху еще комментарии идут, во вторых Managment Studio Express выделяет именно это строку.

Как она что-то выделяет, если по вашим словам "В таком виде триггер компилируется" ?

nvetal

По второму вопросу - если написать как предлагаете вы, то и в этом месте начинает выдаваться так же ошибка "Недопустимое имя столбца "COCAR".

Что еще раз подтверждает, что имя поля набрано неправильно\
Что вернет просто SELECT * FROM INSERTED ?
6 янв 10, 16:51    [8152514]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос чайника про триггеры и таблицу inserted  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
nvetal,

а Вы уверены, что в таблице Car2DriverLog есть поля COCAR, CODRIVER?
6 янв 10, 16:54    [8152530]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос чайника про триггеры и таблицу inserted  [new]
nvetal
Member

Откуда: Воронеж
Сообщений: 109
Компилируется в том виде, в котором я привел в первом посте.
В остальных выдает ошибку.
Ну а насчет структуры - прилагаю скриншот.

К сообщению приложен файл. Размер - 0Kb
6 янв 10, 17:31    [8152666]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос чайника про триггеры и таблицу inserted  [new]
Glory
Member

Откуда:
Сообщений: 104760
Ну и где же в таблице DRIVERS столбец с именем COCAR ??

Сообщение было отредактировано: 6 янв 10, 17:33
6 янв 10, 17:32    [8152673]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос чайника про триггеры и таблицу inserted  [new]
nvetal
Member

Откуда: Воронеж
Сообщений: 109
Ах, шьорт побьери.
Посыпаю голову пеплом и каюсь в идиотизме.
Т.к. первый раз работаю с этой средой, подумал, что енто Студия просто префиксы у полей нарисовала
6 янв 10, 17:38    [8152688]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос чайника про триггеры и таблицу inserted  [new]
nvetal
Member

Откуда: Воронеж
Сообщений: 109
Всем большое спасибо.
6 янв 10, 17:41    [8152696]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос чайника про триггеры и таблицу inserted  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
nvetal,

можно, я дам маленький совет? Делайте всё, абсолютно всё, только скриптами.
Никаких визуальных инструментов, которые якобы всё сделают за Вас!
А скрипты храните в системе контроля версий. Горя знать не будете.
6 янв 10, 18:20    [8152851]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить