У меня есть таблица со столбцом IDENTITY
, и у меня есть триггер INSTEAD OF
для этой таблицы. Если включить IDENTITY_INSERT
, я бы хотел вставить значение, указанное вручную для столбца IDENTITY
.
Есть ли способ правильно справиться с этим сценарием, например, определить значение IDENTITY_INSERT
? Судя по чтению, похоже, что обнаружить текущее значение IDENTITY_INSERT
для конкретной таблицы в прошлом было невозможно. Я не знаю, возможно ли это с более новыми версиями SQL Server.
Создание таблицы SQL:
CREATE TABLE [TestTable]
(
[Id] INTEGER IDENTITY NOT NULL PRIMARY KEY,
[ExampleField] BIT NOT NULL DEFAULT(1)
)
Это то, что я сейчас пробовал, но это кажется довольно расточительным, поскольку IDENTITY_INSERT
, вероятно, будет отключен в большинстве случаев, то есть он всегда будет терпеть неудачу при первой попытке вставки, которая кажется расточительной, С точки зрения производительности.
CREATE TRIGGER [dbo].[trTestTable_ioi] ON [dbo].[TestTable] INSTEAD OF INSERT
AS
BEGIN
BEGIN TRY
INSERT INTO [TestTable]([Id],[ExampleField])
SELECT [Id], [ExampleField]
FROM [inserted]
END TRY
BEGIN CATCH
INSERT INTO [TestTable]([ExampleField])
SELECT [ExampleField]
FROM [inserted]
END CATCH
END