TSQL Использовать текущую вставляемую запись для выбора данных в другой таблице.
Очень плохо знаком с TSQL...
У меня есть следующая таблица под названием "tblinit":
Account_Num UserID Task_Percent
----------- ------------ ------------
1 john.smith 0.75
Я хотел бы обновить значение "Task Percent" в "tblRaw" ниже.
Account_Num UserID Task_Percent
----------- ------------ ------------
1 john.smith 0.5
2 mary.mickle 0.9
3 don.donalds 1
Я планирую использовать хранимую процедуру TSQL, выполняемую триггером при вставке в "tblinit". Хранимая процедура переместит данные в "tblRaw" (слияние или удаление и вставку), а затем обрежет "tblinit", когда процедура будет завершена. tblInit используется только для постановки входящих данных.
Я читал о SCOPE_IDENTITY
а также @@IDENTIY
но не в полной мере понять концепцию. Определяется ли область действия триггером, который выполняет хранимую процедуру? При попытке мои собственные операторы SELECT, используя SCOPE_IDENTITY
а также @@IDENTITY
Я всегда возвращаюсь с "NULL" результатом. Ссылочная статья MSDN, кажется, возвращает первичные ключи, которые не соответствуют данным, указанным в примере статьи. Я явно читаю что-то неправильно. Я хочу взять только что вставленную запись и использовать ее в своем запросе.
По сути, как мне автоматически обновить новое процентное значение john.smith при вставке или, как альтернатива, как полностью добавить новую запись?
2 ответа
как мне автоматически обновить новое процентное значение john.smith при вставке
Этот триггер может быть использован именно для этого:
create trigger tblinit_to_tblRaw
on tblinit
for insert
as
begin
update r
set r.Task_Percent = i.Task_Percent
from inserted i
join tblRaw r on i.UserID = r.UserID -- Join on Account_Num instead?
end
Это не учитывает новые записи (в tblRaw нет совпадений). Для этого вы можете запустить if exists(...
или же merge
,
Я должен признаться, что был немного озадачен вашим намерением, учитывая различные концепции, на которые вы ссылались.
Если вы хотите удалить из исходной таблицы после запуска триггера в обновлении / удалении, значит, вы делаете это неправильно.
Если вы просто хотите сохранить промежуточную сумму в другой таблице по соображениям производительности, воспользуйтесь "индексированными представлениями".
Если вы хотите добавить что-то в одну таблицу, а затем обновить другую и удалить из оригинала, то вы либо ищете очередь, либо просто хранимую процедуру для выполнения обновления соответствующей таблицы. Вам не нужно делать сложные шаги с триггерами и прочее.
Понятия не имею, откуда взялись вещи IDENTITY. Уверен, тебе здесь не нужно.
Я думаю, ты делаешь это более сложным, чем нужно.
Я могу ошибаться - не стесняйтесь уточнять.