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

Откуда: СПб
Сообщений: 270
Подскажите на сколько верен способ выбранный мною для занесения данных в верхнем регистре:
ALTER TRIGGER [dbo].[Cable_BI1] 
   ON  [dbo].[Cable] 
   AFTER INSERT
AS 
BEGIN
	SET NOCOUNT ON;

    UPDATE T1
    SET KKS = UPPER(T2.KKS)
    FROM Cable T1
    INNER JOIN inserted T2 ON T1.ID_CABLE = T2.ID_CABLE
END
13 дек 12, 19:47    [13628434]     Ответить | Цитировать Сообщить модератору
 Re: Корректировка заносимых данных в триггере  [new]
SergePnb
Member

Откуда: Киев
Сообщений: 456
Веткин Сергей,

Оно то сработает, но
- триггер можно отключить
- update конркетно этим тригером не покрыт
- вы создаете избыточную нагрузку на сервер, т.к. тригер-то AFTER INSERT
Я бы просто создал check constraint который обеспечил бы наличие только верхнего регистра и вынес бы в клиентское приложение(процедуру вставки/изменения) UPPER приведение
13 дек 12, 19:57    [13628460]     Ответить | Цитировать Сообщить модератору
 Re: Корректировка заносимых данных в триггере  [new]
vso
Member

Откуда: СПб
Сообщений: 270
SergePnb,

а как в check constraint проверить на наличие всего в верхнем регистре?
13 дек 12, 20:06    [13628497]     Ответить | Цитировать Сообщить модератору
 Re: Корректировка заносимых данных в триггере  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31960
Веткин Сергей
SergePnb,

а как в check constraint проверить на наличие всего в верхнем регистре?
Условием: upper(поле)=поле collation <тут какой то CS коллейшен>
13 дек 12, 20:11    [13628521]     Ответить | Цитировать Сообщить модератору
 Re: Корректировка заносимых данных в триггере  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Веткин Сергей
SergePnb,

а как в check constraint проверить на наличие всего в верхнем регистре?
Field <> UPPER(Field) COLLATE Cyrillic_General_BIN
Можно ещё использовать триггеры INSTEAD OF INSERT, UPDATE
Или вычисляемое поле - хранить строки в поле в том виде, как вставилось,
а везде использовать поле, равное UPPER([хранимое поле])
Его и индексировать можно.
13 дек 12, 20:13    [13628529]     Ответить | Цитировать Сообщить модератору
 Re: Корректировка заносимых данных в триггере  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
Веткин Сергей,

Вам не все равно - как храняться наименования кабельных колодцев?! При выводе UPPERкейсьте...
13 дек 12, 22:38    [13629127]     Ответить | Цитировать Сообщить модератору
 Re: Корректировка заносимых данных в триггере  [new]
vso
Member

Откуда: СПб
Сообщений: 270
iap
Веткин Сергей
SergePnb,

а как в check constraint проверить на наличие всего в верхнем регистре?
Field <> UPPER(Field) COLLATE Cyrillic_General_BIN


Попробовал так ругается при сохранении на уже существующие данные

Пробовал так
Field <> UPPER(Field) COLLATE Cyrillic_General_CI_AS


тоже ругается, хотя у именно такой COLLATE у сервера

pkarklin, стандарты предприятия требуют в верхнем регистре
14 дек 12, 18:55    [13634329]     Ответить | Цитировать Сообщить модератору
 Re: Корректировка заносимых данных в триггере  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31960
Веткин Сергей
Пробовал так
Field <> UPPER(Field) COLLATE Cyrillic_General_CI_AS



тоже ругается, хотя у именно такой COLLATE у сервера
Я же вам написал, нужно поставить знак =, а не <>
:-)
14 дек 12, 19:06    [13634387]     Ответить | Цитировать Сообщить модератору
 Re: Корректировка заносимых данных в триггере  [new]
SergePnb
Member

Откуда: Киев
Сообщений: 456
Веткин Сергей,

alexeyvg кроме того что надо = использовать, сказал
alexeyvg
какой то CS коллейшен

это важно CS значит case sensitive, т.е. с учетом регистра
14 дек 12, 19:40    [13634533]     Ответить | Цитировать Сообщить модератору
 Re: Корректировка заносимых данных в триггере  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31960
SergePnb
Веткин Сергей,

alexeyvg кроме того что надо = использовать, сказал
alexeyvg
какой то CS коллейшен

это важно CS значит case sensitive, т.е. с учетом регистра
А, точно, а то написано "COLLATE Cyrillic_General_CI_AS", что означает "не учитывать регистр", а нужно учитывать.
14 дек 12, 20:08    [13634641]     Ответить | Цитировать Сообщить модератору
 Re: Корректировка заносимых данных в триггере  [new]
vso
Member

Откуда: СПб
Сообщений: 270
Всем спасибо, в итоге заработало так

Field = UPPER(Field) COLLATE Cyrillic_General_CS_AS
18 дек 12, 18:16    [13650440]     Ответить | Цитировать Сообщить модератору
 Re: Корректировка заносимых данных в триггере  [new]
dalex1973
Member

Откуда: Польша
Сообщений: 287
С COLLATE осторожно надо, можно попасть на несовместимость.

Как альтернатива:
BINARY_CHECKSUM(Field) <> BINARY_CHECKSUM(UPPER(Field))
18 дек 12, 18:37    [13650483]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить