如何解决触发器的 INSERTED 和 DELETED 表不能使用数据类型文本的列/字段的限制

问题描述 投票:0回答:1

我在这里和网上读到,触发器使用的特殊表

INSERTED
DELETED
无法访问数据类型为
TEXT
NTEXT
IMAGE
的列。我知道第一个响应是更改数据类型,但这是第三方数据库,所以我不能这样做。

似乎很容易获取

INSERTED
所保存的新数据,但我没有看到任何方法可以从
DELETED
表中获取数据。

有什么办法可以解决这个问题吗?我在网上寻找解决方法,但找不到任何解决方法。这是否意味着不可能?

这需要在

AFTER
DELETE
INSERT
上运行的
UPDATE
触发器中完成。我无法使用
INSTEAD OF
触发器,因为我无法替换对表执行的 DELETE、INSERT 或 UPDATE 操作。我必须采取这个行动。

  1. 添加了适用于
    TEXT
    列的计算列。公式使用
    CAST
    更改为数据类型
    varchar(max)
  2. 添加了适用于
    TEXT
    列的计算列。该公式使用自定义标量函数更改为数据类型
    varchar(max)

我在网上搜索过,没有找到任何东西。

sql-server text triggers
1个回答
0
投票

只需使用主键重新加入主表即可。

CREATE TRIGGER SomeTrigger ON SomeTable FOR INSERT
AS

SET NOCOUNT ON;

INSERT SomeOtherTable (value)
SELECT CAST(t.text_value AS varchar(max))
FROM inserted i
JOIN SomeTable t ON t.PK = i.PK;

理想情况下您应该更改列名称。

text
ntext
几乎不支持任何较新的
max
类型不支持的内容,所以我怀疑应用程序是否会注意到。

© www.soinside.com 2019 - 2024. All rights reserved.