powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как тригер поправить...
15 сообщений из 15, страница 1 из 1
Как тригер поправить...
    #32003553
Shef
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот такой тригер . Хотелось бы чтобы он не вставлял повторения сравнивая не всю строку полностью а тока если повторяются первые 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
...
Рейтинг: 0 / 0
Как тригер поправить...
    #32003556
Victor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
>>Но так чо то не хочет проблема помоему в синтаксисе LIKE

А что говорит?

Можно так
IF exists (select * from vacancy,inserted where vacancy.addition like substring(inserted.addition,1,255)+'%')
Rollback transaction
...
Рейтинг: 0 / 0
Как тригер поправить...
    #32003558
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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

Удачи
...
Рейтинг: 0 / 0
Как тригер поправить...
    #32003561
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообщем-то всё выше написано правильно, за исключением пустяка - не учтено что вставленные записи УЖЕ есть в таблице(вставились при инсерте) и поэтому они обязательно найдуться.


Я бы написал как-то так:

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
...
Рейтинг: 0 / 0
Как тригер поправить...
    #32003563
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
...
Рейтинг: 0 / 0
Как тригер поправить...
    #32003568
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да я не гордый...

Но мне кажется если таблица очень большая, но есть индекс, то Ваш вариант будет более тормозиной - есть у меня смутные подозрения что v.addition like substring(i.addition,1,255)+'%' будет работать по индексу.
...
Рейтинг: 0 / 0
Как тригер поправить...
    #32003574
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Но мне кажется если таблица очень большая, но есть индекс, то Ваш вариант будет более тормозиной - есть у меня смутные >подозрения что v.addition like substring(i.addition,1,255)+'%' будет работать по индексу.

???????
Дык, это, а че можно создать индекс на таком поле?? Если да, то подскажите как, я пробовал назначить индекс на поле varchar(1000) (для самообразования т. сказать ) Так сервер меня обругал нехорошими словами и сказал, что он может мне помочь ну максимум на varchar(900)

так вот если можно создать индекс на таком поле, то тогда просто ограничение уникальности и нет проблем
...
Рейтинг: 0 / 0
Как тригер поправить...
    #32003579
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хрен знает, может он переменную делает в 1000, а поле у него 900 (я сам так делаю )
а уникальный индекс не поможет - надо гарантировать уникальность только первых 255 символов. Так что формально я прав

хотя я про индекс зря написал - как раз без индекса разница будет существенней - найти одну запись гораздо быстрее чем отсортировать все
...
Рейтинг: 0 / 0
Как тригер поправить...
    #32003580
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>а уникальный индекс не поможет - надо гарантировать уникальность только первых 255 символов. Так что формально я прав

Ну, из описания вопрошающего я все же понял, что ему именно уникальность нужно поддерживать, а первые символы это для ускорения. Если я неправильно понял, тогда мой второй вариант вообще не проходит

>хотя я про индекс зря написал - как раз без индекса разница будет существенней - найти одну запись гораздо быстрее чем >отсортировать все
Подумав слегка, соглашусь
...
Рейтинг: 0 / 0
Как тригер поправить...
    #32003581
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Если я неправильно понял, тогда мой второй вариант вообще не проходит

Не, неправильно, подходит, забыл что substring и там выполняется
...
Рейтинг: 0 / 0
Как тригер поправить...
    #32003590
Shef
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хочу поправить триггер захожу в Manage Triggers нужной таблицы а там кроме new ничего нету. Странно то что в остальных таблицах все тригерры просматриваются а в этой нету. При попытке создать такой триггер - говорит что в этой таблице уже сть триггер с таким именем. Как быть? Почему триггер пропал?. Как его убить из квери анализера?
...
Рейтинг: 0 / 0
Как тригер поправить...
    #32003602
Фотография Garya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я сталкивался с таким глюком. Откуда возникает, сам не понял. Удаляется триггер обыкновенно - командой Drop Trigger Trigger_name. Уточни, какую версию SQL-сервера юзаешь.
...
Рейтинг: 0 / 0
Как тригер поправить...
    #32003637
Shef
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MS SQL 7.0 . Прикольно сегодня пришел открыл EM а триггер появился.. Комп не выключался не перезагружался и сервер не останавливался.
...
Рейтинг: 0 / 0
Как тригер поправить...
    #32003642
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я когда триггера писал в EM (давно это было
) сталкивался с таким глюком, тогда принцип его появления понял, сейчас не помню просто, что то там было связано с удалением оного и добавлением нового кода кажется, лечил перезапуском EM, но вероятно можно было просто reconnect к серверу сделать.
...
Рейтинг: 0 / 0
Как тригер поправить...
    #32003928
Andrey Max
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В качестве пустяка

declare @Inadd char(255)
объявить как VARCHAR

Select addition from vacancy where addition like @Inadd+"%"
поправить на
like ltrim(@Inadd)+"%"
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как тригер поправить...
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]