Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Как в триггере работать с временными таблицами
|
|||
|---|---|---|---|
|
#18+
Ситуация такая: из триггера вызывается ХП. В ней нужно создать временную таблицу и закачать туда данные. Использовать CREATE TABLE нельзя, т.к. в триггере это запрещено. Остается использовать Select * into #temp. Но проблема в том, что Select нужно формировать динамически и выполнять exec'ом. После выполнения exec в ХП таблица #temp не видна, наверное, потому что exec выполняет SQL как отдельный батч. Подскажите, пожалуйста, как вывернуться ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2001, 11:11 |
|
||
|
Как в триггере работать с временными таблицами
|
|||
|---|---|---|---|
|
#18+
select * into ##Tmp, т.е. селект в глобальную временную таблицу ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2001, 02:41 |
|
||
|
Как в триггере работать с временными таблицами
|
|||
|---|---|---|---|
|
#18+
2 Sasha А не приведёте текст ХП? Ну не верю я что нужно обязательно формировать динамически создание таблиц. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2001, 06:00 |
|
||
|
Как в триггере работать с временными таблицами
|
|||
|---|---|---|---|
|
#18+
У нас в приложении очень много используются триггера. Проблема с временными таблицами решается одним методом: Все временные таблицы необходимые для работы триггера создаются до обработки таблицы. В триггере таблицы только очищаются перед использованием. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2001, 06:33 |
|
||
|
Как в триггере работать с временными таблицами
|
|||
|---|---|---|---|
|
#18+
2 SergSuper Вот часть ХП: select @sqlstr='begin tran select l.Id, l.RecId into #idlog from #u_delete d, u_log l where d.'+@IdName+' = l.RecId commit' exec(@sqlstr) Дело в том, что я не знаю заранее имя первичного ключа в #u_delete (это просто копия таблицы deleted из триггера), поэтому приходится использовать exec. Решение проблемы я уже нашел. Нужно просто создать пустую временную таблицу, а потом через exec туда писать. select Id, RecId into #idlog from u_log where 1 = 0 exec(@sqlstr) ... Но остается вопрос об области видимости временных таблиц. Вроде бы временная таблица видна везде в области коннекта, а получается что во внешних ХП (если она создается во вложенной ХП или exec'ом) она не видна. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2001, 06:51 |
|
||
|
Как в триггере работать с временными таблицами
|
|||
|---|---|---|---|
|
#18+
2 Sasha Мне как раз и интересно: зачем задавать имя столбца как переменную? Я просто так никогда не делал и интересно посмотреть на задачу, которая требует это. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2001, 07:44 |
|
||
|
Как в триггере работать с временными таблицами
|
|||
|---|---|---|---|
|
#18+
Вот что я сделал select * into #Tmp from MyTable create proc #PTmp as select * from #Tmp exec #PTmp работает Далее create proc MyProc as select * from #Tmp exec MyProc тоже работает А вот если exec-ом, то не выходит Говорю в последний раз exec('select * into ##Tmp from MyTable') create proc MyProc as select * from ##Tmp exec MyProc ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2001, 08:13 |
|
||
|
Как в триггере работать с временными таблицами
|
|||
|---|---|---|---|
|
#18+
2 SergSuper Задача: при у далении из некоторых таблиц нужно сохранить удаленные записи. К сожелению, такие у нас пользователи. Поудаляют данные, а потом наезжают, что программа не работает и.т.д. Просто послать их нельзя, т.к. организация серьезная. Поскольку такие ошибки происходят часто, то нужно как-то вести журнал удаленных записей, чтобы все можно было отследить. БД спроектирована так, что в разных таблицах PK может иметь разные имена. В таблице deleted со строками можно работать только через PK. Вот мне и нужно задавать имя поля PK для извлечения id. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2001, 10:14 |
|
||
|
Как в триггере работать с временными таблицами
|
|||
|---|---|---|---|
|
#18+
>Но остается вопрос об области видимости временных таблиц. Вроде бы временная таблица видна везде в области коннекта, а получается что во внешних ХП (если она создается во вложенной ХП или exec'ом) она не видна. У Вас уже два ответа есть! Скажите что Вас не устраивает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2001, 10:26 |
|
||
|
Как в триггере работать с временными таблицами
|
|||
|---|---|---|---|
|
#18+
Для решения такой задачи нужно просто в соответствующие таблицы добавить поле [Deleted] bit. И триггер: Create trigger ttt on MyTable for DELETE as -- Заменяет физическое удаление на логическое insert into MyTable select Fld1, Fld2, Fld3, 1 -- 1 должна попасть в поле [Deleted] from Deleted И View: select Fld1, Fld2, Fld3 from MyTable where [Deleted]<>1 И всё! Вместо того, чтобы давать прямой доступ к таблицам, работай со View. Восстановление удаленной записи сводится к сбросу флага [Deleted]. В этот же триггер можно воткнуть регистрацию, когда кем удалена и с какого компьютера. У меня работает еще сложнее. Регистрируются любые модификации данных. Журнал ведется в самой исходной таблице. Отслеживается история изменений одной и той же записи независимо : - по оси календарного времени - по оси учетного времени все модификации производятся добавлением новых версий записей (с помощью Instead-триггеров). Вместо одного идентификатора используется несколько (идентификатор записи как совокупности всех редакций на всех осях, идентификатор редакции на оси учетного времени, идентификатор редакции на оси календарного времени). Конфликты репликации отсутствуют непрочь. Не смотря на то, что MERGE-репликация задействуется по схеме приоритетов, во VIEW выбор идет по календарной дате последней модификации. Поэтому наряду с журнализацией решается проблема устранения несогласованности транзакций при MERGE-репликации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2001, 10:58 |
|
||
|
|

start [/forum/topic.php?fid=46&fpage=3572&tid=1826623]: |
0ms |
get settings: |
10ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
32ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
41ms |
get tp. blocked users: |
1ms |
| others: | 229ms |
| total: | 348ms |

| 0 / 0 |
