郁闷了,IMAGE的触发器,用instead of后无法插入数据,只能记录
我的触发器如下:
CREATE TRIGGER Detaineephoto_InsAndUpdAndDel ON Detaineephoto instead of Insert,update,delete
AS
declare @type int
declare @mk bigint
declare @pkey varchar(128)
declare @FK nvarchar(128)
declare @sql nvarchar(4000)
declare @Tabname nvarchar(128)
set @Tabname='DetaineePhoto'
SELECT @pkey=COLUMN_NAME FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE TABLE_NAME=+@Tabname
--insert
IF EXISTS (SELECT TOP 1 * FROM Inserted) AND NOT EXISTS (SELECT TOP 1 * FROM Deleted)
begin
select * into #t1 from inserted
set @type=1
set @sql='Select @fk='+@pkey+' from #t1'
exec sp_executesql @sql,N'@fk varchar(128) output',@fk
output
end
--update
IF EXISTS (SELECT TOP 1 * FROM Inserted) AND EXISTS (SELECT TOP 1 * FROM Deleted)
begin
select * into #t2 from inserted
set @type=2
set @sql='Select @fk='+@pkey+' from #t2'
exec sp_executesql @sql,N'@fk varchar(128) output',@fk
output
end
--delete
IF NOT EXISTS (SELECT TOP 1 * FROM Inserted) AND EXISTS (SELECT TOP 1 * FROM Deleted)
begin
select * into #t3 from Deleted
set @type=3
set @sql='Select @fk='+@pkey+' from #t3'
exec sp_executesql @sql,N'@fk varchar(128) output',@fk
output
end
insert UpdateNode(TableName,NoteId1,Type,re) values(@Tabname,@fk,@type,'')//想实现的功能很简单,当此表修改新增纪录时纪录其字段名和表名
只有84分,全抛了,呵呵
我的触发器如下:
CREATE TRIGGER Detaineephoto_InsAndUpdAndDel ON Detaineephoto instead of Insert,update,delete
AS
declare @type int
declare @mk bigint
declare @pkey varchar(128)
declare @FK nvarchar(128)
declare @sql nvarchar(4000)
declare @Tabname nvarchar(128)
set @Tabname='DetaineePhoto'
SELECT @pkey=COLUMN_NAME FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE TABLE_NAME=+@Tabname
--insert
IF EXISTS (SELECT TOP 1 * FROM Inserted) AND NOT EXISTS (SELECT TOP 1 * FROM Deleted)
begin
select * into #t1 from inserted
set @type=1
set @sql='Select @fk='+@pkey+' from #t1'
exec sp_executesql @sql,N'@fk varchar(128) output',@fk
output
end
--update
IF EXISTS (SELECT TOP 1 * FROM Inserted) AND EXISTS (SELECT TOP 1 * FROM Deleted)
begin
select * into #t2 from inserted
set @type=2
set @sql='Select @fk='+@pkey+' from #t2'
exec sp_executesql @sql,N'@fk varchar(128) output',@fk
output
end
--delete
IF NOT EXISTS (SELECT TOP 1 * FROM Inserted) AND EXISTS (SELECT TOP 1 * FROM Deleted)
begin
select * into #t3 from Deleted
set @type=3
set @sql='Select @fk='+@pkey+' from #t3'
exec sp_executesql @sql,N'@fk varchar(128) output',@fk
output
end
insert UpdateNode(TableName,NoteId1,Type,re) values(@Tabname,@fk,@type,'')//想实现的功能很简单,当此表修改新增纪录时纪录其字段名和表名
只有84分,全抛了,呵呵
ALTER TABLE [TC] WITH NOCHECK ADD CONSTRAINT [PK_TC] PRIMARY KEY NONCLUSTERED ( [Code] )
goCREATE TABLE [TD] ([ID] [int] IDENTITY (1, 1) NOT NULL , [U_Text] [text] NULL )
ALTER TABLE [TD] WITH NOCHECK ADD CONSTRAINT [PK_TD] PRIMARY KEY NONCLUSTERED ( [ID] )
go
CREATE TRIGGER TC_Update ON [dbo].[TC]
instead of update -- 只能在这类触发器中使用 text列
AS
delete a from tc a, deleted d where a.[Code]=d.[Code]
insert tc select * from insertedinsert td (u_text)
select u_text from inserted
goINSERT [TC] ( [Code] , [U_Name] , [U_Text] ) VALUES ( '1' , 'a' , 'aaaa' )
INSERT [TC] ( [Code] , [U_Name] , [U_Text] ) VALUES ( '2' , 'b' , 'bbb' )update tc set u_name='d' where u_name='b'select * from tc
select * from tddrop trigger TC_Update
drop table TC,TD
在 INSTEAD OF 触发器中使用 text、ntext 和 image 数据
数据修改可能包含 text、ntext 和 image 列。在基表中,存储于 text、ntext 或 image 列的值是指向容纳数据的页的文本指针。有关更多信息,请参见 text、ntext 和 image 数据。 虽然 AFTER 触发器不支持 inserted 和 deleted 表中的 text、ntext 或 image 数据,而 INSTEAD OF 触发器却支持。text、ntext 和 image 数据存储在 inserted 表和 deleted 表中,与数据存储在基表中的方法不同。text、ntext 和 image 数据不以单独的页链形式存储。相反,它们在每行内以连续字符串形式存储,这意味着在 inserted 和 deleted 表中 text、ntext 或 image 列内没有文本指针。TEXTPTR 和 TEXTVALID 函数以及 READTEXT、UPDATETEXT 和 WRITETEXT 语句对 inserted 或 deleted 表中的 text、ntext 或 image 列无效。支持 text、ntext 或 image 列的所有其它用途,如在选择列表、WHERE 子句搜索条件或者 SUBSTRING、PATINDEX 或 CHARINDEX 函数中引用它们。INSTEAD OF 触发器中的对 text、ntext 或 image 数据的操作受当前 SET TEXTSIZE 选项的影响,可使用 @@TEXTSIZE 函数确定该选项。
存储在 inserted 和 deleted 表中的 text、ntext 或 image 数据类型因触发操作(INSERT、UPDATE 或 DELETE)而异:
对于 INSERT 语句,inserted 表包含 text、ntext 或 image 列的新值。而 deleted 表没有行。
对于 DELETE 语句,inserted 表没有行,并且 deleted 表行包含 DELETE 启动前 text、ntext 或 image 列所具有的值。
对于不更改 text、ntext 或 image 值的 UPDATE 语句,inserted 和 deleted 表行都包含与 text、ntext 或 image 列相同的值。
对于更改 text、ntext 或 image 值的 UPDATE 语句,deleted 表包含 UPDATE 启动前存在的数据值,并且 inserted 表包含 SET 子句中指定的已进行任何修改的数据。
如果 INSERT、UPDATE 或 DELETE 语句使用较大的 text、ntext 或 image 值修改许多行,则需要相当大的内存来容纳 inserted 和 deleted 表中的 text、ntext 或 image 数据复本。复制这些大量的数据还会降低性能。只要有可能,引用具有 INSTEAD OF 触发器的视图或表的 INSERT、UPDATE 和 DELETE 语句应一次修改一行或一次只修改几行。
当有数据插入或修改时记录到 tig表中
case
1为insert
2为edittig则对应纪录
操作类型及id即可