powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Динамический SQL в триггере
47 сообщений из 47, показаны все 2 страниц
Динамический SQL в триггере
    #37862635
IFK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IFK
Гость
Уважаемый форум,

Боян, но ни одно найденное решение не сработало - прошу помощи зала.
Чтобы долго не расписывать - код:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
ALTER TRIGGER [dbo].[SRA_Log] 
   ON  [dbo].[tbl_SRA]
   AFTER UPDATE
AS 
	DECLARE @rec_id varchar(10), @field varchar(50), @value_before varchar(100), @value_after varchar(100), @usrn varchar(25), @SQL_STR varchar(100)
IF UPDATE(cpa_Decision) OR UPDATE (cpa_Case_From) OR UPDATE (cpa_Case_To) OR UPDATE ([cpa_Decision_Date]) OR UPDATE ([cpa_Leaf_No])
OR UPDATE ([cpa_Stage]) OR UPDATE ([cpa_Sample_Out]) OR UPDATE ([cpa_Change_Date]) OR UPDATE ([cpa_Decision_Old])
BEGIN
	SET NOCOUNT ON;
	Set @rec_id=(SELECT SMID FROM Deleted)
	Set @field=''
	IF (SELECT cpa_Decision FROM Deleted WHERE(SMID=@rec_id))<>(SELECT cpa_Decision FROM Inserted WHERE(SMID=@rec_id))
		Set @field='cpa_Decision'
	IF (SELECT cpa_Case_From FROM Deleted WHERE(SMID=@rec_id))<>(SELECT cpa_Case_From FROM Inserted WHERE(SMID=@rec_id))
		Set @field='cpa_Case_From'
	IF (SELECT cpa_Case_To FROM Deleted WHERE(SMID=@rec_id))<>(SELECT cpa_Case_To FROM Inserted WHERE(SMID=@rec_id))
		Set @field='cpa_Case_To'
	IF (SELECT cpa_Decision_Date FROM Deleted WHERE(SMID=@rec_id))<>(SELECT cpa_Decision_Date FROM Inserted WHERE(SMID=@rec_id))
		Set @field='cpa_Decision_Date'
	IF (SELECT cpa_Leaf_No FROM Deleted WHERE(SMID=@rec_id))<>(SELECT cpa_Leaf_No FROM Inserted WHERE(SMID=@rec_id))
		Set @field='cpa_Leaf_No'
	IF (SELECT cpa_Stage FROM Deleted WHERE(SMID=@rec_id))<>(SELECT cpa_Stage FROM Inserted WHERE(SMID=@rec_id))
		Set @field='cpa_Stage'
	IF (SELECT cpa_Sample_Out FROM Deleted WHERE(SMID=@rec_id))<>(SELECT cpa_Sample_Out FROM Inserted WHERE(SMID=@rec_id))
		Set @field='cpa_Sample_Out'
	IF (SELECT cpa_Change_Date FROM Deleted WHERE(SMID=@rec_id))<>(SELECT cpa_Change_Date FROM Inserted WHERE(SMID=@rec_id))
		Set @field='cpa_Change_Date'
	IF (SELECT cpa_Decision_Old FROM Deleted WHERE(SMID=@rec_id))<>(SELECT cpa_Decision_Old FROM Inserted WHERE(SMID=@rec_id))
		Set @field='cpa_Decision_Old'
		
	Set @SQL_STR=('SELECT ' + @field + ' FROM Deleted WHERE(SMID=' + @rec_id + ')') <= здесь нужно получить значение поля, которо подставляется из переменной @field
	Set @usrn=RIGHT(suser_name(), LEN(suser_name())-8)
	Set @usrn=(SELECT usr_Name FROM DIM_Users WHERE(usr_Login=@usrn))
	EXEC Logging_Changes @rec_id, 'tbl_SRA', @field, @value_before, @value_after, @usrn



В результате получаю не поле, а его имя. Пробовал и так
Код: sql
1.
SELECT @field FROM Deleted WHERE(SMID=' + @rec_id + ')

и через sp_executesql - нифига. Где я туплю и как побороть? Спасибо заранее!
...
Рейтинг: 0 / 0
Динамический SQL в триггере
    #37862642
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IFKГде я туплю и как побороть?
Динамические таблицы inserted/deleted не доступны ни в динанических запросах, ни в вызываемых процедурах
...
Рейтинг: 0 / 0
Динамический SQL в триггере
    #37862660
IFK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IFK
Гость
GloryIFKГде я туплю и как побороть?
Динамические таблицы inserted/deleted не доступны ни в динанических запросах, ни в вызываемых процедурах

Хм. Че-то не очень верится. Какая разница между строкой SQL где опрашивается таблица Deleted с явным указанием поля и такой же строкой, где подставляется имя поля?
В принципе задача такова: необходимо в зависимости от поля, где произошло изменение данных, получить старое и новое значения. Как еще это сделать, не используя Deleted / Inserted - не знаю. Подскажите, уважаемые. Заранее благодарю! :-)
...
Рейтинг: 0 / 0
Динамический SQL в триггере
    #37862668
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IFKХм. Че-то не очень верится
Ваше право. Если сообщение об ошибке вам не достаточно.
...
Рейтинг: 0 / 0
Динамический SQL в триггере
    #37862676
IFK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IFK
Гость
GloryIFKХм. Че-то не очень верится
Ваше право. Если сообщение об ошибке вам не достаточно.

Ну, это ладно - кто хочет, верит, кто хочет - нет. Как насчет конструктивных предложений?
...
Рейтинг: 0 / 0
Динамический SQL в триггере
    #37862705
step_ks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
для начала написать так, чтобы триггер хотя бы потенциально правильно работал, когда в deleted > 1 записи и изменения были в более, чем в одном поле.
...
Рейтинг: 0 / 0
Динамический SQL в триггере
    #37862774
AnaceH
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
IFK,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
 insert into dbo.tLog select i.*, d.value as oldValue
  from 
 (select id, value, colName from (select * from inserted i) i
 unpivot (value for colName in (name, surname)) u) i
 join
 (select id, value, colName from (select * from deleted d) d
 unpivot (value for colName in (name, surname)) u) d
 on i.id = d.id
 and i.colName = d.colName
 and i.value <> d.value


И не нужен динамический sql.
...
Рейтинг: 0 / 0
Динамический SQL в триггере
    #37862779
IFK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IFK
Гость
step_ksдля начала написать так, чтобы триггер хотя бы потенциально правильно работал, когда в deleted > 1 записи и изменения были в более, чем в одном поле.

А в Deleted не будет больше одной записи, потому как триггер должен срабатывать на изменение каждой записи в одном поле из перечисленных.
...
Рейтинг: 0 / 0
Динамический SQL в триггере
    #37862787
Фотография Shakill
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IFKstep_ksдля начала написать так, чтобы триггер хотя бы потенциально правильно работал, когда в deleted > 1 записи и изменения были в более, чем в одном поле.

А в Deleted не будет больше одной записи, потому как триггер должен срабатывать на изменение каждой записи в одном поле из перечисленных.

если одной командой меняется сразу несколько записей и/или полей, триггер сработает один раз и в deleted будет несколько записей. в документации об этом есть
...
Рейтинг: 0 / 0
Динамический SQL в триггере
    #37862788
Фотография DeColo®es
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IFKА в Deleted не будет больше одной записи, потому как триггер должен срабатывать на изменение каждой записи в одном поле из перечисленных.То, на что он должен срабатывать, описано в документации.
...
Рейтинг: 0 / 0
Динамический SQL в триггере
    #37862789
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IFKА в Deleted не будет больше одной записи, потому как триггер должен срабатывать на изменение каждой записи в одном поле из перечисленных.
Триггера в MSSQL срабатывают один раз на событие.
...
Рейтинг: 0 / 0
Динамический SQL в триггере
    #37862791
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IFKstep_ksдля начала написать так, чтобы триггер хотя бы потенциально правильно работал, когда в deleted > 1 записи и изменения были в более, чем в одном поле.
А в Deleted не будет больше одной записи, потому как триггер должен срабатывать на изменение каждой записи в одном поле из перечисленных.
Это не так.
...
Рейтинг: 0 / 0
Динамический SQL в триггере
    #37862794
IFK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IFK
Гость
DeColo®esIFKА в Deleted не будет больше одной записи, потому как триггер должен срабатывать на изменение каждой записи в одном поле из перечисленных.То, на что он должен срабатывать, описано в документации.

Можно ссылку на документацию, где об этом сказано?
...
Рейтинг: 0 / 0
Динамический SQL в триггере
    #37862798
IFK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IFK
Гость
ShakillIFKпропущено...


А в Deleted не будет больше одной записи, потому как триггер должен срабатывать на изменение каждой записи в одном поле из перечисленных.

если одной командой меняется сразу несколько записей и/или полей, триггер сработает один раз и в deleted будет несколько записей. в документации об этом есть

У меня нет команды, которая меняет сразу несколько записей и/или полей. Этот триггер сделан для отслеживания изменений, вносимых пользователем вручную. Там, где может меняться сразу несколько записей/полей, я, естественно, делаю триггер по-другому. Задача стоит конкретно: передать в SQL запрос имя поля, которое определяется перед самим запросом. Как это сделать?
...
Рейтинг: 0 / 0
Динамический SQL в триггере
    #37862802
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IFKУ меня нет команды, которая меняет сразу несколько записей и/или полей. Этот триггер сделан для отслеживания изменений, вносимых пользователем вручную. Там, где может меняться сразу несколько записей/полей, я, естественно, делаю триггер по-другому.Сначала напишем говнокод, потом будем его переписывать? Очень интересный подход.
...
Рейтинг: 0 / 0
Динамический SQL в триггере
    #37862818
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IFKЗадача стоит конкретно: передать в SQL запрос имя поля, которое определяется перед самим запросом. Как это сделать?
Если вы все еще горите желаением усугубить код вашего триггера еще и динамическим запросом, то вам придется перегнать содержимое таблиц inserted/deleted, например, во временные таблицы.
...
Рейтинг: 0 / 0
Динамический SQL в триггере
    #37862819
IFK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IFK
Гость
Гавриленко Сергей АлексеевичIFKУ меня нет команды, которая меняет сразу несколько записей и/или полей. Этот триггер сделан для отслеживания изменений, вносимых пользователем вручную. Там, где может меняться сразу несколько записей/полей, я, естественно, делаю триггер по-другому.Сначала напишем говнокод, потом будем его переписывать? Очень интересный подход.

Товарищ, давайте не будем переходить на личности. Все здесь крутые хацкеры, я это понимаю. А вот понимают ли крутые хацкеры, что не все такие крутые как они и может быть вообще не хацкеры? И если человек просит помощи, то обычно он надеется получить вразумительный ответ, а не кидание какашками в ответ. Если Вам нечего сказать, кроме как "говнокод" - прошу помолчать. Хорошо? Спасибо большое.
...
Рейтинг: 0 / 0
Динамический SQL в триггере
    #37862826
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IFKТоварищ, давайте не будем переходить на личности. Все здесь крутые хацкеры, я это понимаю. А вот понимают ли крутые хацкеры, что не все такие крутые как они и может быть вообще не хацкеры? И если человек просит помощи, то обычно он надеется получить вразумительный ответ, а не кидание какашками в ответ. Если Вам нечего сказать, кроме как "говнокод" - прошу помолчать. Хорошо? Спасибо большое.Я про вашу личность и слова не сказал. Я говорил про ваш код и ваш подход к решению задачи. Что он плох, вам сказали все. Подумайте об этом.
...
Рейтинг: 0 / 0
Динамический SQL в триггере
    #37862830
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Решения для аудита до поля часто основываются на генераторах. За счет этого внутри триггера получается длинный, но статический код.
...
Рейтинг: 0 / 0
Динамический SQL в триггере
    #37862831
IFK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IFK
Гость
GloryIFKЗадача стоит конкретно: передать в SQL запрос имя поля, которое определяется перед самим запросом. Как это сделать?
Если вы все еще горите желаением усугубить код вашего триггера еще и динамическим запросом, то вам придется перегнать содержимое таблиц inserted/deleted, например, во временные таблицы.

Горю, но что-то мне подсказывает, что по эффективности это будет равно ношению воды в решете. :-(
Нельзя ли другим способом решить изначальную задачу? Задача состоит в выявлении изменений в конкретных полях и занесении этих изменений в таблицу протокола изменений. Поля указаны в триггере. Изменения вносятся вручную пользователями. Спасибо за любые подсказки!
...
Рейтинг: 0 / 0
Динамический SQL в триггере
    #37862841
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Джоин инсертед и апдейтед по ПК где инсертед.поле <> апдейтед.поле

Писать статический код для каждого поля.
...
Рейтинг: 0 / 0
Динамический SQL в триггере
    #37862844
IFK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IFK
Гость
Гавриленко Сергей АлексеевичIFKТоварищ, давайте не будем переходить на личности. Все здесь крутые хацкеры, я это понимаю. А вот понимают ли крутые хацкеры, что не все такие крутые как они и может быть вообще не хацкеры? И если человек просит помощи, то обычно он надеется получить вразумительный ответ, а не кидание какашками в ответ. Если Вам нечего сказать, кроме как "говнокод" - прошу помолчать. Хорошо? Спасибо большое.Я про вашу личность и слова не сказал. Я говорил про ваш код и ваш подход к решению задачи. Что он плох, вам сказали все. Подумайте об этом.

Хорошо, значит, я неправильно интерпретировал значение слова "говнокод" в приложении к моему случаю. Постараюсь употреблять это слово на форуме почаще - оказывается оно не имеет никакого отношения к личности.

Если мой код плох для выполнения конкретной задачи - предложите Ваш вариант решения или хотя бы подскажите направление. Это и будет помощью, за которой люди обращаются на форум. Ну, кроме прояснения значения слова "говнокод"...
...
Рейтинг: 0 / 0
Динамический SQL в триггере
    #37862848
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IFKНельзя ли другим способом решить изначальную задачу? Задача состоит в выявлении изменений в конкретных полях и занесении этих изменений в таблицу протокола изменений. Поля указаны в триггере. Изменения вносятся вручную пользователями. Спасибо за любые подсказки!
Что мешает написать имена полей явно ?
...
Рейтинг: 0 / 0
Динамический SQL в триггере
    #37862849
IFK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IFK
Гость
Программист-ЛюбительДжоин инсертед и апдейтед по ПК где инсертед.поле <> апдейтед.поле

Писать статический код для каждого поля.

Угу. Это мне было ясно с самого начала, но хотелось изящества и универсальности хоть какой-то. :-(
...
Рейтинг: 0 / 0
Динамический SQL в триггере
    #37862850
qwerty112
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
IFKGloryпропущено...

Если вы все еще горите желаением усугубить код вашего триггера еще и динамическим запросом, то вам придется перегнать содержимое таблиц inserted/deleted, например, во временные таблицы.

Горю, но что-то мне подсказывает, что по эффективности это будет равно ношению воды в решете. :-(
Нельзя ли другим способом решить изначальную задачу? Задача состоит в выявлении изменений в конкретных полях и занесении этих изменений в таблицу протокола изменений. Поля указаны в триггере. Изменения вносятся вручную пользователями. Спасибо за любые подсказки!
нечетатель, - 12803376
...
Рейтинг: 0 / 0
Динамический SQL в триггере
    #37862851
Мистер Хенки
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IFKGloryпропущено...

Если вы все еще горите желаением усугубить код вашего триггера еще и динамическим запросом, то вам придется перегнать содержимое таблиц inserted/deleted, например, во временные таблицы.

Горю, но что-то мне подсказывает, что по эффективности это будет равно ношению воды в решете. :-(
Нельзя ли другим способом решить изначальную задачу? Задача состоит в выявлении изменений в конкретных полях и занесении этих изменений в таблицу протокола изменений. Поля указаны в триггере. Изменения вносятся вручную пользователями. Спасибо за любые подсказки!
может лучше не удалять и изменять записи, а каждый раз инсертить новую с статусом актуальная, а предыдущую переводить в статус архив. Ну и так далее, в общем думаю идея понятна
...
Рейтинг: 0 / 0
Динамический SQL в триггере
    #37862852
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IFKно хотелось изящества и универсальности хоть какой-то.
Для чего универсальности ? Чтобы медленнее работало ?
...
Рейтинг: 0 / 0
Динамический SQL в триггере
    #37862861
IFK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IFK
Гость
Мистер ХенкиIFKпропущено...


Горю, но что-то мне подсказывает, что по эффективности это будет равно ношению воды в решете. :-(
Нельзя ли другим способом решить изначальную задачу? Задача состоит в выявлении изменений в конкретных полях и занесении этих изменений в таблицу протокола изменений. Поля указаны в триггере. Изменения вносятся вручную пользователями. Спасибо за любые подсказки!
может лучше не удалять и изменять записи, а каждый раз инсертить новую с статусом актуальная, а предыдущую переводить в статус архив. Ну и так далее, в общем думаю идея понятна

Идея понятна. Но если в таблице 20000 записей, и изменения в полях одной и той же записи происходят несколько раз на дню, то архивная таблица будет очень быстро переполнена ненужными копиями одной и той же записи с изменениями в разных полях. Отследить эти изменения впоследствии будет довольно сложно.
...
Рейтинг: 0 / 0
Динамический SQL в триггере
    #37862864
IFK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IFK
Гость
GloryIFKно хотелось изящества и универсальности хоть какой-то.
Для чего универсальности ? Чтобы медленнее работало ?

Нет, чтобы выглядело красивее...
...
Рейтинг: 0 / 0
Динамический SQL в триггере
    #37862868
Фотография Anatoly Podgoretsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IFKХорошо, значит, я неправильно интерпретировал значение слова "говнокод" в приложении к моему случаю. Постараюсь употреблять это слово на форуме почаще - оказывается оно не имеет никакого отношения к личности.
Разницу между - ты дурак и код дурацкий понимаем или нет?
...
Рейтинг: 0 / 0
Динамический SQL в триггере
    #37862871
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все уже давно украдено до нас. Изучайте: http://www.sql.ru/articles/mssql/2005/030701changeslogging.shtml
...
Рейтинг: 0 / 0
Динамический SQL в триггере
    #37862876
Мистер Хенки
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IFKМистер Хенкипропущено...

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

Идея понятна. Но если в таблице 20000 записей, и изменения в полях одной и той же записи происходят несколько раз на дню, то архивная таблица будет очень быстро переполнена ненужными копиями одной и той же записи с изменениями в разных полях. Отследить эти изменения впоследствии будет довольно сложно.
При таком подходе можно изменять сразу запись, а не только отдельные ее поля. Отследить тоже не проблема.
...
Рейтинг: 0 / 0
Динамический SQL в триггере
    #37862887
Фотография Ken@t
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IFKGloryпропущено...

Для чего универсальности ? Чтобы медленнее работало ?

Нет, чтобы выглядело красивее...
Хм. кому ? Есть хранение данных, есть их представление или вы и это в одну кучу мешаете. Из пракитики , сделайте таблицу лога с структурой базовой таблицы + 3 поля : Состояние U I D, дату изменения и принципала. Это покроет все ваши хотелки. Чистите её по необходимости.
...
Рейтинг: 0 / 0
Динамический SQL в триггере
    #37862931
IFK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IFK
Гость
Anatoly PodgoretskyIFKХорошо, значит, я неправильно интерпретировал значение слова "говнокод" в приложении к моему случаю. Постараюсь употреблять это слово на форуме почаще - оказывается оно не имеет никакого отношения к личности.
Разницу между - ты дурак и код дурацкий понимаем или нет?

Понимаю, поэтому и предполагаю, что выражение "говнокод" подразумевает, что написавший его есть дурак, иными словами. Приведу пример: как вы, уважаемый, отреагируете на слова "вы производите говнорезультат"? Что, неужели скажете, что это косвеным образом не унижает ваше достоинство? Или, может быть, все-таки лучше будет, если вам скажут "ваш результат неудовлетворительный, потому что ..."? Есть разница или нет?
...
Рейтинг: 0 / 0
Динамический SQL в триггере
    #37862936
IFK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IFK
Гость
Мистер ХенкиIFKпропущено...


Идея понятна. Но если в таблице 20000 записей, и изменения в полях одной и той же записи происходят несколько раз на дню, то архивная таблица будет очень быстро переполнена ненужными копиями одной и той же записи с изменениями в разных полях. Отследить эти изменения впоследствии будет довольно сложно.
При таком подходе можно изменять сразу запись, а не только отдельные ее поля. Отследить тоже не проблема.

А мне не нужно изменять сразу всю запись. Нафига, если изменяется только одно поле, скажем результат опыта/проверки? Или изменяется только номер опыта.
...
Рейтинг: 0 / 0
Динамический SQL в триггере
    #37862941
IFK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IFK
Гость
Ken@tIFKпропущено...


Нет, чтобы выглядело красивее...
Хм. кому ? Есть хранение данных, есть их представление или вы и это в одну кучу мешаете. Из пракитики , сделайте таблицу лога с структурой базовой таблицы + 3 поля : Состояние U I D, дату изменения и принципала. Это покроет все ваши хотелки. Чистите её по необходимости.

Отлично, так и делаю, если у меня только одна таблица, по которой нужно отслеживать изменения. Но впоследствии мне нужно растиражировать этот триггер (с изменениями, разумеется) и на другие таблицы, которые необходимо отслеживать. А в этих других таблицах полей для отслеживания намного больше - для этого и требуется некоторая универсальность триггера, о чем я и писал.
...
Рейтинг: 0 / 0
Динамический SQL в триггере
    #37862943
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IFKПонимаю, поэтому и предполагаю, что выражение "говнокод" подразумевает, что написавший его есть дурак, иными словами.Может и такое быть, но не обязательно.
IFKПриведу пример: как вы, уважаемый, отреагируете на слова "вы производите говнорезультат"Смотря чьи слова, и смотря как эти слова будут расходиться с моей собственной оценкой этого результата.
IFKИли, может быть, все-таки лучше будет, если вам скажут "ваш результат неудовлетворительный, потому что ..."? Есть разница или нет?Извините, но на форуме никто не должен с вами нянькаться. Если вы не в состоянии рассмотреть за формой то, что вам пытаются сообщить, то это исключительно ваши проблемы.
...
Рейтинг: 0 / 0
Динамический SQL в триггере
    #37862952
Фотография Ken@t
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IFKKen@tпропущено...

Хм. кому ? Есть хранение данных, есть их представление или вы и это в одну кучу мешаете. Из пракитики , сделайте таблицу лога с структурой базовой таблицы + 3 поля : Состояние U I D, дату изменения и принципала. Это покроет все ваши хотелки. Чистите её по необходимости.

Отлично, так и делаю, если у меня только одна таблица, по которой нужно отслеживать изменения. Но впоследствии мне нужно растиражировать этот триггер (с изменениями, разумеется) и на другие таблицы, которые необходимо отслеживать. А в этих других таблицах полей для отслеживания намного больше - для этого и требуется некоторая универсальность триггера, о чем я и писал.

Это всё делается генератором по шаблону и структуре таблицы из INFORMATION_SCHEMA.TABLES
...
Рейтинг: 0 / 0
Динамический SQL в триггере
    #37862962
IFK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IFK
Гость
Гавриленко Сергей АлексеевичIFKПонимаю, поэтому и предполагаю, что выражение "говнокод" подразумевает, что написавший его есть дурак, иными словами.Может и такое быть, но не обязательно.
IFKПриведу пример: как вы, уважаемый, отреагируете на слова "вы производите говнорезультат"Смотря чьи слова, и смотря как эти слова будут расходиться с моей собственной оценкой этого результата.
IFKИли, может быть, все-таки лучше будет, если вам скажут "ваш результат неудовлетворительный, потому что ..."? Есть разница или нет?Извините, но на форуме никто не должен с вами нянькаться. Если вы не в состоянии рассмотреть за формой то, что вам пытаются сообщить, то это исключительно ваши проблемы.

А я и не прошу нянькатся. Я прошу выбирать выражения и высказываться по существу. Нечего сказать - молчи. Что, много прошу или это как-то расходится с общепринятыми правилами общения?
...
Рейтинг: 0 / 0
Динамический SQL в триггере
    #37862964
AnaceH
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Автор, чем мой вариант с unpivot не подходит для ваших нужд?
...
Рейтинг: 0 / 0
Динамический SQL в триггере
    #37862965
IFK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IFK
Гость
Ken@tIFKпропущено...


Отлично, так и делаю, если у меня только одна таблица, по которой нужно отслеживать изменения. Но впоследствии мне нужно растиражировать этот триггер (с изменениями, разумеется) и на другие таблицы, которые необходимо отслеживать. А в этих других таблицах полей для отслеживания намного больше - для этого и требуется некоторая универсальность триггера, о чем я и писал.

Это всё делается генератором по шаблону и структуре таблицы из INFORMATION_SCHEMA.TABLES

А можно с этого места поподробнее?
...
Рейтинг: 0 / 0
Динамический SQL в триггере
    #37862967
IFK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IFK
Гость
AnaceHАвтор, чем мой вариант с unpivot не подходит для ваших нужд?

Еще не знаю - разбираюсь. :-)
...
Рейтинг: 0 / 0
Динамический SQL в триггере
    #37863048
RubinDm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IFKKen@tпропущено...
Это всё делается генератором по шаблону и структуре таблицы из INFORMATION_SCHEMA.TABLES
А можно с этого места поподробнее?
Все ваши тригеры будут однотипными... написание кода таких триггеров можно автоматизировать. Для этого надо написать генератор строки с кодом t-sql, функцию, что-то типа
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
create function GenHistoryTrigger
  (  @tableName nvarchar(128)
  ) returns nvarchar(max)
as
begin
  declare @tsql nvarchar(max) = 'create trigger ' + @tableName_Histoty + ' on ' + @tableName;
  set @tsql = @tsql + ...
  return @tsql;
end
go
...
Рейтинг: 0 / 0
Динамический SQL в триггере
    #37863061
Klick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IFK для этого и требуется некоторая универсальность триггера, о чем я и писал.

Код: sql
1.
Set @field='cpa_Decision'


Мега-универсально! )))

А вообще тут несколько веток обсуждения было по теме "логирования", где все разжевано с примерами. Научитесь пользоваться поиском.
...
Рейтинг: 0 / 0
Динамический SQL в триггере
    #37863066
IFK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IFK
Гость
KlickIFK для этого и требуется некоторая универсальность триггера, о чем я и писал.

Код: sql
1.
Set @field='cpa_Decision'


Мега-универсально! )))

А вообще тут несколько веток обсуждения было по теме "логирования", где все разжевано с примерами. Научитесь пользоваться поиском.

Зашибись. Именно вашего разрешения пользоваться поиском я и ждал. Спасибо, теперь уж конечно, когда высочайшее разрешение получено... Почему бы и нет.
...
Рейтинг: 0 / 0
Динамический SQL в триггере
    #37863248
Klick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IFK,

Готовые решения:
Один Два Три
Свои "запилить", на основе этих, легкотня.

OFF_TOP: IFK, а вы знатный грубиян, оказывается... :(
...
Рейтинг: 0 / 0
Динамический SQL в триггере
    #37863264
IFK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IFK
Гость
KlickIFK,

Готовые решения:
Один Два Три
Свои "запилить", на основе этих, легкотня.

OFF_TOP: IFK, а вы знатный грубиян, оказывается... :(

За примеры спасибо. Буду разбираться.
Оф-топ: пардон, не я начал. На неадекватные высказывания считаю себя вправе реагировать также неадекватно. Так сказать "ассиметричный ответ" (с) Путин или кто там еще.
...
Рейтинг: 0 / 0
47 сообщений из 47, показаны все 2 страниц
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Динамический SQL в триггере
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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