Я создаю верхний триггер. У меня есть ситуация, когда мне нужно проверить условие на столбце таблицы, не зная, каково точное имя столбца. Триггер является общим и может применяться к любой таблице с различными столбцами.Как использовать динамическую переменную в операторе SQL
Псевдо-код:
// define a cursor that loops through all columns in "MyTable"
Define cursor C1 for (select COLS from SYSCAT.TABLES where TABS="MyTable")
FOR
// take the next column from the cursor
@temp_var = C1.COLS
// DELETED and INSERTED are tables that also contain the same columns as "MyTable" table.
if([email protected]_var <> [email protected]_var)
THEN
...
Данное заявление if([email protected]_var <> ...
делает, конечно, не работает, но может быть, вы можете увидеть, что я пытаюсь сделать? Поэтому я бы хотел, чтобы это было во время выполнения, например. if(DELETED.MyColumn <>... where "MyColumn"
- это колонка в "MyTable"
, а также в INSERTED
и DELETED columns
. Обратите внимание, что, поскольку этот метод должен быть общим, я заранее не знаю, какие столбцы имеют таблица (зависит от конкретной используемой таблицы).
Любые идеи о том, как динамически строить if-statement?
Если вы не знаете, что такое имя столбца, как вы ожидаете, что триггер узнает? Триггеры не принимают переменные. Вы можете использовать CONTEXT_INFO, но yuck, yuck, yuck. –
спасибо за ваш ответ Аарон! Ну, я не могу указать имена столбцов, потому что они будут разными для разных столбцов, но курсор знает. Курсор содержит в «COLS» все имена столбцов таблицы. Вот почему я пытаюсь использовать его для извлечения столбцов таблицы. – user1340582
Я вижу, что вы перебираете все столбцы в таблице, но это все еще не объясняет, как ваш курсор будет знать, какой из них является. –