如何在“inserted”和“deleted”表中使用text,ntext或image列

时间:2009-12-20 12:28:16

标签: sql-server sql-server-2008 triggers

不能在'inserted'和'deleted'表中使用text,ntext或image列。

在这种情况下,解决方法应该是什么? :(

2 个答案:

答案 0 :(得分:19)

从SQL Server 2005开始,TEXT/NTEXT/IMAGE已弃用 - 您应该使用(N)VARCHAR(MAX)VARBINARY(MAX)数据类型。

(N)VARCHAR(MAX)(参见MSDN docs here)和VARBINARY(MAX)允许最多2 GB的数据

来自MSDN文档:

  

nvarchar [(n | max)]

     

可变长度的Unicode字符数据。 n可以是1到1之间的值   4000。 max表示最大存储大小为2 ^ 31-1个字节。(= 2 GB)

(N)VARCHAR(MAX)类型也允许所有常用的T-SQL字符串函数对它们起作用 - 根本不是(N)TEXT的情况。

作为此MSDN article shows,触发器也支持替换类型:

  

SQL Server 2008不允许    text,ntext或image 列   插入和删除中的引用   AFTER触发器的表格。然而,   这些数据类型包括在内   仅向后兼容的目的。   大数据的首选存储   是使用 varchar(max),    nvarchar(max) varbinary(max)数据   类型。 AFTER和INSTEAD OF   触发支持varchar(max),    nvarchar(max)和varbinary(max)数据   在插入和删除的表中。

答案 1 :(得分:4)

这是解决方法:

SQL Trigger cannot do INSTEAD OF DELETE but is required for ntext, image columns

基本上,您需要将inserted和/或deleted伪表加入基础表并阅读NTEXTTEXTIMAGE数据来自基础表格。