|
Как тригер поправить...
|
|||
---|---|---|---|
#18+
Вот такой тригер . Хотелось бы чтобы он не вставлял повторения сравнивая не всю строку полностью а тока если повторяются первые 255 символов. CREATE trigger no_dubble on vacancy For Insert as Set NOCOUNT ON declare @Inadd char(1000) Select @Inadd=addition from inserted Select addition from vacancy where addition=@Inadd If @@rowcount>1 Begin Rollback transaction end я делал так CREATE trigger no_dubble on vacancy For Insert as Set NOCOUNT ON declare @Inadd char(255) Select @Inadd=addition from inserted Select addition from vacancy where addition like @Inadd+"%" If @@rowcount>1 Begin Rollback transaction end но так чо то не хочет проблема помоему в синтаксисе LIKE ... |
|||
:
Нравится:
Не нравится:
|
|||
27.03.2001, 13:52 |
|
Как тригер поправить...
|
|||
---|---|---|---|
#18+
>>Но так чо то не хочет проблема помоему в синтаксисе LIKE А что говорит? Можно так IF exists (select * from vacancy,inserted where vacancy.addition like substring(inserted.addition,1,255)+'%') Rollback transaction ... |
|||
:
Нравится:
Не нравится:
|
|||
27.03.2001, 14:09 |
|
Как тригер поправить...
|
|||
---|---|---|---|
#18+
Shef, а если будет несколько записей в inserted? Предложу что-то похожее на вариант Victora, тока его вариант будет роллбэк делать, даже если одна запись вставляется . Обязательно что-ли Like использовать if (select count(*) from vacancy v, inserted i where substring(v.addition, 1, 255) = substring(i.addition, 1,255) > 1 rollback transaction Удачи ... |
|||
:
Нравится:
Не нравится:
|
|||
27.03.2001, 14:20 |
|
Как тригер поправить...
|
|||
---|---|---|---|
#18+
Вообщем-то всё выше написано правильно, за исключением пустяка - не учтено что вставленные записи УЖЕ есть в таблице(вставились при инсерте) и поэтому они обязательно найдуться. Я бы написал как-то так: CREATE trigger no_dubble on vacancy For Insert as Set NOCOUNT ON IF exists (select substring(i.addition,1,255) from vacancy v,inserted i where v.addition like substring(i.addition,1,255)+'%' group by substring(i.addition,1,255) having count(*)>1) Rollback transaction ... |
|||
:
Нравится:
Не нравится:
|
|||
27.03.2001, 14:38 |
|
Как тригер поправить...
|
|||
---|---|---|---|
#18+
2 SergSuper >не учтено что вставленные записи УЖЕ есть в таблице Да, немного перебор получился но работать все равно будет Ваш вариант понравился, только хочется немного поправить CREATE trigger no_dubble on vacancy For Insert as Set NOCOUNT ON IF exists (select substring(v.addition,1,255) from vacancy v group by substring(v.addition,1,255) having count(*)>1) Rollback transaction ... |
|||
:
Нравится:
Не нравится:
|
|||
27.03.2001, 14:49 |
|
Как тригер поправить...
|
|||
---|---|---|---|
#18+
Да я не гордый... Но мне кажется если таблица очень большая, но есть индекс, то Ваш вариант будет более тормозиной - есть у меня смутные подозрения что v.addition like substring(i.addition,1,255)+'%' будет работать по индексу. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.03.2001, 15:16 |
|
Как тригер поправить...
|
|||
---|---|---|---|
#18+
>Но мне кажется если таблица очень большая, но есть индекс, то Ваш вариант будет более тормозиной - есть у меня смутные >подозрения что v.addition like substring(i.addition,1,255)+'%' будет работать по индексу. ??????? Дык, это, а че можно создать индекс на таком поле?? Если да, то подскажите как, я пробовал назначить индекс на поле varchar(1000) (для самообразования т. сказать ) Так сервер меня обругал нехорошими словами и сказал, что он может мне помочь ну максимум на varchar(900) так вот если можно создать индекс на таком поле, то тогда просто ограничение уникальности и нет проблем ... |
|||
:
Нравится:
Не нравится:
|
|||
27.03.2001, 15:32 |
|
Как тригер поправить...
|
|||
---|---|---|---|
#18+
хрен знает, может он переменную делает в 1000, а поле у него 900 (я сам так делаю ) а уникальный индекс не поможет - надо гарантировать уникальность только первых 255 символов. Так что формально я прав хотя я про индекс зря написал - как раз без индекса разница будет существенней - найти одну запись гораздо быстрее чем отсортировать все ... |
|||
:
Нравится:
Не нравится:
|
|||
27.03.2001, 16:25 |
|
Как тригер поправить...
|
|||
---|---|---|---|
#18+
>а уникальный индекс не поможет - надо гарантировать уникальность только первых 255 символов. Так что формально я прав Ну, из описания вопрошающего я все же понял, что ему именно уникальность нужно поддерживать, а первые символы это для ускорения. Если я неправильно понял, тогда мой второй вариант вообще не проходит >хотя я про индекс зря написал - как раз без индекса разница будет существенней - найти одну запись гораздо быстрее чем >отсортировать все Подумав слегка, соглашусь ... |
|||
:
Нравится:
Не нравится:
|
|||
27.03.2001, 16:37 |
|
Как тригер поправить...
|
|||
---|---|---|---|
#18+
>Если я неправильно понял, тогда мой второй вариант вообще не проходит Не, неправильно, подходит, забыл что substring и там выполняется ... |
|||
:
Нравится:
Не нравится:
|
|||
27.03.2001, 16:41 |
|
Как тригер поправить...
|
|||
---|---|---|---|
#18+
Хочу поправить триггер захожу в Manage Triggers нужной таблицы а там кроме new ничего нету. Странно то что в остальных таблицах все тригерры просматриваются а в этой нету. При попытке создать такой триггер - говорит что в этой таблице уже сть триггер с таким именем. Как быть? Почему триггер пропал?. Как его убить из квери анализера? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.03.2001, 19:09 |
|
Как тригер поправить...
|
|||
---|---|---|---|
#18+
Я сталкивался с таким глюком. Откуда возникает, сам не понял. Удаляется триггер обыкновенно - командой Drop Trigger Trigger_name. Уточни, какую версию SQL-сервера юзаешь. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.03.2001, 21:02 |
|
Как тригер поправить...
|
|||
---|---|---|---|
#18+
MS SQL 7.0 . Прикольно сегодня пришел открыл EM а триггер появился.. Комп не выключался не перезагружался и сервер не останавливался. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2001, 14:15 |
|
Как тригер поправить...
|
|||
---|---|---|---|
#18+
Я когда триггера писал в EM (давно это было ) сталкивался с таким глюком, тогда принцип его появления понял, сейчас не помню просто, что то там было связано с удалением оного и добавлением нового кода кажется, лечил перезапуском EM, но вероятно можно было просто reconnect к серверу сделать. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2001, 14:35 |
|
|
start [/forum/topic.php?fid=46&msg=32003642&tid=1827065]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
36ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
54ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 146ms |
0 / 0 |