Я создал триггер INSTEAD OF INSERT для представления в моей базе данных.Я хочу знать, какие столбцы включены в список столбцов оператора INSERT в представлении.
Если вы читаете документацию MSDN для триггеров, функции UPDATE () и COLUMNS_UPDATED () должны удовлетворять этому требованию.Однако во время тестирования я обнаружил, что независимо от того, какие столбцы находятся в списке столбцов INSERT, функции UPDATE () и COLUMNS_UPDATED () всегда возвращают все столбцы из представления.
CREATE VIEW dbo.MyView (BatchId, [Status], OrderNumber, WhenClosed) AS
SELECT bth.BatchId, bth.[Status], bth.OrderNumber,
Private.ufxAdjustDateTime(bth.WhenClosed, bth.WhenClosedUtcOffset)
FROM Private.Batch AS bth
GO
CREATE TRIGGER dbo.[MyView-Insert] ON dbo.MyView INSTEAD OF INSERT AS
BEGIN
SET NOCOUNT ON
DECLARE @batchIdIsSet BIT
SELECT @batchIdIsSet = 0
IF UPDATE(BatchId)
SELECT @batchIdIsSet = 1
INSERT INTO Private.Batch
(BatchId, [Status], OrderNumber)
SELECT CASE @batchIdSet
WHEN 1 THEN ins.BatchId
ELSE NEWID()
END, ins.[Status], ins.OrderNumber
FROM inserted AS ins
END
Причина, по которой я хочу это сделатьэто то, что мне нужно изменить существующую таблицу, и у меня есть множество устаревшего кода, который опирается на нее.Итак, я создал новую таблицу, изменил старую таблицу на представление и создал в представлении триггеры, чтобы разрешить операторы INSERT, UPDATE и DELETE.
Теперь в старой таблице были значения по умолчанию длянекоторые столбцы, если для вставки в представление используется значение по умолчанию, я хочу использовать значение по умолчанию при вставке в новую таблицу.Чтобы сделать это, я должен быть в состоянии выяснить, какие столбцы имели [явно] значения, предоставленные для INSERT.
Недостаточно проверить, что столбец имеет NULL, потому что оператор INSERT может явно установить значение поляк NULL, и это вполне приемлемо.
Хммм, я надеюсь, это понятно.Кеп.