在 INSTEAD OF 触发器中使用 text、ntext 和 image 数据

数据修改可能会涉及 textntextimage 列。在基表中,存储在 textntextimage 列中的值是文本指针,它指向保存数据的页。有关详细信息,请参阅行内数据

ms175196.note(zh-cn,SQL.90).gif注意:
使用 textntextimage 数据只是为了向后兼容。存储大型数据的首选方法是使用 varchar(max)nvarchar(max)varbinary(max) 数据类型。AFTER 触发器和 INSTEAD OF 触发器均支持在插入的删除的表中使用 varchar(max)nvarchar(max)varbinary(max) 数据。

虽然 AFTER 触发器不支持在插入的删除的表中使用 textntextimage 数据,但 INSTEAD OF 触发器支持。textntextimage 数据在插入的删除的表中的存储方式与在基表中的存储方式不同。textntextimage 数据不是各自作为一个页链存储的,而是在每行中作为连续的字符串存储的。这意味着在插入的删除的表中,textntextimage 列没有文本指针。TEXTPTR 函数、TEXTVALID 函数、READTEXT 语句、UPDATETEXT 语句和 WRITETEXT 语句对插入的删除的表中的 textntextimage 列无效。对 textntextimage 列的任何其他使用均受支持。例如,在选择列表、WHERE 子句搜索条件、SUBSTRING 函数、PATINDEX 函数或 CHARINDEX 函数中引用它们。在 INSTEAD OF 触发器中,对 textntextimage 数据的操作受当前 SET TEXTSIZE 选项的影响。此值可由 @@TEXTSIZE 函数来确定。

存储在插入的删除的表中的 textntextimage 数据的类型随着触发操作(INSERT、UPDATE 或 DELETE)的不同而有所不同:

  • 执行 INSERT 语句后,插入的表的 textntextimage 列中将包含新值,而删除的表不包含行。
  • 执行 DELETE 语句后,插入的表中没有行,而删除的表行中包含 DELETE 启动前 textntextimage 列中包含的值。
  • 执行 textntextimage 值没有改变的 UPDATE 语句后,插入的删除的表行的 textntextimage 列中包含相同的值。
  • 执行 textntextimage 值发生改变的 UPDATE 语句后,删除的表中包含 UPDATE 启动前存在的数据值,而插入的表中包含 SET 子句中指定的修改后的数据。

如果 INSERT、UPDATE、或 DELETE 语句修改了含有较大的 textntextimage 值的很多行,则需要大量内存来备份插入的删除的表中 textntextimage 数据。复制大量的数据还会降低性能。如果 INSERT、UPDATE 和 DELETE 语句引用了具有 INSTEAD OF 触发器的视图或表,应尽可能每次修改一行,或者一次仅修改几行。

请参阅

概念

使用 INSTEAD OF 触发器

帮助和信息

获取 SQL Server 2005 帮助