Мой триггер, как показано ниже,
Alter TRIGGER [dbo].[LogTable_InsertTrigger] on [dbo].[std_table] AFTER INSERT
as
DECLARE @ColName varchar(50), @QueryText nvarchar(max)
declare @inserted TABLE(
[CountryID] [int] NOT NULL,
[Country] [nvarchar](255) NOT NULL,
[RegionId] [int] NULL
)
insert into @inserted
select * from inserted
DECLARE objCursor CURSOR FAST_FORWARD FOR
select ColName from dbo.getColumnNames('std_table')
OPEN objCursor
FETCH NEXT FROM objCursor INTO @ColName
WHILE @@FETCH_STATUS = 0
BEGIN
set @QueryText= '
insert into dbo.LogTable
(StandardType,Attribute,Action,NEwValue,UserId,ModifiedDate)
select ''Country'','''+@ColName+''',''Insert'','+@ColName+',1,getdate()
from @inserted'
EXEC sp_executesql @QueryText
FETCH NEXT FROM objCursor INTO @ColName
END
CLOSE objCursor
DEALLOCATE objCursor
Когда я пытаюсь вставить в таблицу std_table в DA Layer, я получаю исключение Must declare the table variable "@inserted"
.
Я не мог использовать вставленную таблицу напрямую, потому что я пишу динамический запрос, внутри которого магические таблицы не будут работать. Поэтому я пытаюсь сбросить данные во вставленной таблице во временную таблицу и получить к ней доступ.
Я пытался с
select *
into #inserted
from inserted
Это работает, но так как к моему приложению обращаются многие пользователи по сети, это вызовет проблемы с данными. Так что я не могу использовать это.