无法在"inserted"和"deleted"表中使用text,ntext或image列

noo*_*ber 14 sql-server triggers

我收到错误"不能在'inserted'和'deleted'表中使用text,ntext或image列",因为原始表中有ntext字段,我附加了一个触发器.

这是一个解决方案:http://lazycodeprogrammer.blogspot.com/2009/08/how-to-use-inserteddeleted-with.html

但原始(非修改)查询足够复杂.我应该使用JOIN运算符编写什么而不是SELECT*FROM INSERTED,因为它是推荐的?

pdi*_*ddy 16

真正的问题是您尝试在插入的表中选择ntext,text或image类型的列.触发器中不允许这样做.

真正的解决方案是将所有ntext,nvarchar(max),text更改为varchar(max),将image更改为varbinary(max),如MS所建议的那样.

MS声明这些类型已弃用,将在以后的版本中删除.

此外,由于没有行内数据,ntext的性能确实很慢.

  • 大声笑.那么,最重要的问题是MS告诉我们"这些类型已被弃用,并将在未来版本中删除,bla-bla-bla",但他们自己使用它们.猜猜是哪儿?在SharePoint DB中.我必须知道,尽管NTEXT广泛而且积极地用于存储列表,但是哪些行被更改以及哪些字段被更改.我知道,你会说:"不要直接使用DB,而是使用OM".拜托,不要.去年我在几个项目中探索了糟糕的OM,我想要的性能和功能集只能在数据库级别上使用. (5认同)

noo*_*ber 9

找到了一个很好的解决方案:

  1. SELECT FROM INSERTED只是id列(它不是ntext或image,正在执行查询).
  2. 从原始表*中选择具有相同ID的.
  3. 如果需要,请在INSERTED上使用UPDATED()以了解哪些列已更改.

  • 这实际上不是那么好的解决方案.虽然它对插入表工作正常,但删除表时这种方法是错误的,因为您将在更新后接收值,而不是在更新之前. (3认同)