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. Уверен, тебе здесь не нужно.

Я думаю, ты делаешь это более сложным, чем нужно.

Я могу ошибаться - не стесняйтесь уточнять.

Другие вопросы по тегам