请教sqlserver触发器:text,ntext,image类型不能在deleted,inserted表中?

superhanliu 2006-02-16 04:55:51
现在有一张表a,里面有image类型的一个字段a1
现在对表a建立一个触发器for update的
里面执行了这样一条语句
insert table_bak (id,val) select 1 del.a1 from deleted del

insert table_bak (id,val) select 2 ins.a1 from inserted ins

结果执行该触发器创建语句时提示:text,ntext,image类型不能在deleted,inserted表
table_bak的val字段当然也是image类型的。

所以想请问一下,是不是sqlserver不支持触发器里面操作text,ntext,image类型
还是我的触发器写得有问题?
多谢指点了,万分感激!
...全文
967 点赞 收藏 2
写回复
2 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
zlp321002 2006-02-16
在 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 语句应一次修改一行或一次只修改几行。
回复
wgsasd311 2006-02-16
只有INSTEAD OF类型的触发器才支持上述类型字段操作.
回复
相关推荐
发帖
疑难问题
创建于2007-09-28

2.1w+

社区成员

MS-SQL Server 疑难问题
申请成为版主
帖子事件
创建了帖子
2006-02-16 04:55
社区公告
暂无公告