sql - 如何将 DB2 触发器转换为 SQL Server?
问题描述
我正在将一些 DB2 触发器转换为 SQL Server。这里展示的其中一个我正在努力解决,Conversion 在一定程度上尝试过,但似乎还不够好,无法解决。
在更新或插入之前触发执行,并在写入数据库之前根据带 where 子句的括号中的语句PDE_KEY
选择列的值。Select
需要帮忙。
DB2 触发器
CREATE OR REPLACE TRIGGER "TDC" BEFORE
INSERT
ON
"DECL_CONSIGNMENT" REFERENCING NEW AS NEW FOR EACH ROW NOT SECURED SET
NEW.PDE_KEY = (
SELECT
D.PDE_KEY
FROM
DECL D
WHERE
D.DE_KEY = NEW.DE_KEY)
此触发器的 SQL Server 转换(我的尝试):
CREATE TRIGGER [TDC]
ON [DECL_CONSIGNMENT]
INSTEAD OF INSERT
AS
BEGIN
DECLARE @PDE_KEY BIGINT
SET NOCOUNT ON
SELECT
@PDE_KEY = D.PDE_KEY
FROM
DECL D
WHERE
D.DE_KEY = (...work upto here)
END
解决方案
instead of
触发器必须显式执行所需的 dml 。
REATE TRIGGER [TDC]
ON [DECL_CONSIGNMENT]
INSTEAD OF INSERT
AS
BEGIN
SET NOCOUNT ON;
INSERT INTO [DECL_CONSIGNMENT] (a, b, .. PDE_KEY, ..)
SELECT a, b, .. (
SELECT
D.PDE_KEY
FROM
DECL D
WHERE
D.DE_KEY = i.DE_KEY),
..
FROM inserted i;
END
推荐阅读
- javascript - 如何在 React 中检测小数作为数字
- angular - Angular HttpClient 在 Router.navigate() 之后停止工作。收到 400(错误请求)
- azure - 列出在 Azure 中有权访问 LEAP 支持和 LEAP 开发订阅的所有用户
- python - Python:两个 FOR 循环,第一个不继续
- c# - 如何在 C# 脚本中的 DistanceJoint2D 中配置“连接刚体”?
- python - 来自神经网络的一组动作空间上的返回分布
- r - 取消嵌套一个 ts 类
- sql-server - sqlalchemy+mssql+python3 查询编码
- uipath - 没有特定 ID 时 UIPath 选择器如何工作
- vb.net - TCP 客户端未正确接收数据 VB.NET