gpt4 book ai didi

sql-server - INSERT TRIGGERS 和 UPDATE() 函数

转载 作者:行者123 更新时间:2023-12-02 12:40:02 24 4
gpt4 key购买 nike

我已在数据库中的 View 上创建了 INSTEAD OF INSERT 触发器。我想知道 View 上的 INSERT 语句的列列表中包含哪些列。

如果您阅读有关触发器的 MSDN 文档,则 UPDATE() 和 COLUMNS_UPDATED() 函数应该满足此要求。但是,在测试过程中,我发现无论 INSERT 列列表中有哪些列,UPDATE() 和 COLUMNS_UPDATED() 函数始终返回 View 中的所有列。

CREATE VIEW dbo.MyView (BatchId, [Status], OrderNumber, WhenClosed) AS
SELECT bth.BatchId, bth.[Status], bth.OrderNumber,
Private.ufxAdjustDateTime(bth.WhenClosed, bth.WhenClosedUtcOffset)
FROM Private.Batch AS bth
GO
CREATE TRIGGER dbo.[MyView-Insert] ON dbo.MyView INSTEAD OF INSERT AS
BEGIN
SET NOCOUNT ON

DECLARE @batchIdIsSet BIT

SELECT @batchIdIsSet = 0
IF UPDATE(BatchId)
SELECT @batchIdIsSet = 1

INSERT INTO Private.Batch
(BatchId, [Status], OrderNumber)
SELECT CASE @batchIdSet
WHEN 1 THEN ins.BatchId
ELSE NEWID()
END, ins.[Status], ins.OrderNumber
FROM inserted AS ins
END

我想要这样做的原因是我需要修改现有的表,并且我有大量依赖于它的遗留代码。所以我所做的就是创建一个新表,将旧表更改为 View ,并在 View 上创建触发器,以允许 INSERT、UPDATE 和 DELETE 语句。

现在,旧表对某些列有默认值,如果插入 View 使用默认值,我想在插入新表时使用默认值。为此,我必须能够找出哪些列[显式]为 INSERT 提供了值。

检查列是否有 NULL 是不够的,因为 INSERT 语句可以显式地将字段值设置为 NULL,这是完全可以接受的。

嗯,我希望这是清楚的。保持。

最佳答案

在 INSERT 语句中,每一列都会受到影响。它要么获取 NULL,要么获取您指定的值。

检查 NULL 将是最好的选择,但由于你不能这样做,我认为你可能会有点卡住。您能找出可能需要显式处理 NULL 的场景吗?

关于sql-server - INSERT TRIGGERS 和 UPDATE() 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2083910/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com