我收到错误“无法在'inserted'和'deleted'表中使用text,ntext或image列”,因为原始表中有ntext字段,我已经附加了触发器。
这是一个解决方案:http://lazycodeprogrammer.blogspot.com/2009/08/how-to-use-inserteddeleted-with.html
但原始(非修改)查询足够复杂。我应该使用JOIN运算符编写什么而不是SELECT * FROM INSERTED,因为它是推荐的?
答案 0 :(得分:15)
真正的问题是您尝试在插入的表中选择ntext,text或image类型的列。触发器不允许这样做。
真正的解决方案是将所有ntext,nvarchar(max),text更改为varchar(max),将image更改为varbinary(max),如MS所建议的那样。
MS声明这些类型已弃用,将在以后的版本中删除。
此外,由于没有行内数据,ntext的性能非常慢。
答案 1 :(得分:8)
找到了一个很好的解决方案:
答案 2 :(得分:1)
使用“INSTEAD OF”触发器可以解决问题,因为text,ntext和image字段在“inserted”和“deleted”表中可用。 查看http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=148387以了解如何完成。
答案 3 :(得分:0)
在yourtable
上插入后使用以下触发器:
SELECT textfields
FROM yourtable
WHERE EXISTS (
SELECT 1
FROM {inserted/deleted}
WHERE {inserted/deleted}.PK = {yourtable}.PK
)