如果列具有允许值之一,是否可以限制用户进一步更新列
Is there a way to restrict user to update column further if it has one of the allowable value
我正在寻找一种方法来限制用户在 SQL 服务器 table.
中已经具有特定值(来自允许值)的列时进行更新
假设第 1 列有限制,只允许 'Y' 和 'N' 之一
例如([列 1]='N' 或 [列 1]='Y')
如果值为'N',可以更改为'Y'或'N'
如果该值已经是 'Y',则用户无法将列更新为 'N'
可以应用什么约束来模拟此行为?
有没有办法为此使用检查约束或更新触发器是唯一的方法(我正在探索但不确定是否是实现此目的的正确方法)。
你无法用 CONSTRAINT
做到这一点,不。 CONSTRAINT
"cares" 关于列被设置的值,而不是它原来的值。 INSTEAD OF
触发器在这里似乎是更好的选择。
这过于简化了,但您可以这样做:
CREATE TRIGGER trg_NoYToN ON dbo.YourTable
INSTEAD OF UPDATE
AS
UPDATE YT
SET SomeColumn = i.SomeColumn,
AnotherColumn = i.AnotherColumn,
YourYNColumn = CASE WHEN YT.YourYNColumn = 'Y' THEN 'Y' ELSE i.YourYNColumn END
...
FROM dbo.YourTable YT
JOIN dbo.inserted i ON YT.YourIDColumn = i.YourIDColumn;
GO
我想,您也可以使用 AFTER UPDATE
触发器来 "undo" 更改,这样更容易编写,但需要在 table 上写入 2 次才能生效行数:
CREATE TRIGGER trg_StopYtoN ON dbo.YourTable
AFTER UPDATE
AS
UPDATE YT
SET YourYNColumn = 'Y'
FROM dbo.YourTable YT
JOIN deleted d ON YT.YourIDColumn = d.YourIDColumn
WHERE d.YourYNColumn = 'Y'
AND YT.YourYNColumn = 'N';
GO
我正在寻找一种方法来限制用户在 SQL 服务器 table.
中已经具有特定值(来自允许值)的列时进行更新假设第 1 列有限制,只允许 'Y' 和 'N' 之一 例如([列 1]='N' 或 [列 1]='Y')
如果值为'N',可以更改为'Y'或'N' 如果该值已经是 'Y',则用户无法将列更新为 'N'
可以应用什么约束来模拟此行为? 有没有办法为此使用检查约束或更新触发器是唯一的方法(我正在探索但不确定是否是实现此目的的正确方法)。
你无法用 CONSTRAINT
做到这一点,不。 CONSTRAINT
"cares" 关于列被设置的值,而不是它原来的值。 INSTEAD OF
触发器在这里似乎是更好的选择。
这过于简化了,但您可以这样做:
CREATE TRIGGER trg_NoYToN ON dbo.YourTable
INSTEAD OF UPDATE
AS
UPDATE YT
SET SomeColumn = i.SomeColumn,
AnotherColumn = i.AnotherColumn,
YourYNColumn = CASE WHEN YT.YourYNColumn = 'Y' THEN 'Y' ELSE i.YourYNColumn END
...
FROM dbo.YourTable YT
JOIN dbo.inserted i ON YT.YourIDColumn = i.YourIDColumn;
GO
我想,您也可以使用 AFTER UPDATE
触发器来 "undo" 更改,这样更容易编写,但需要在 table 上写入 2 次才能生效行数:
CREATE TRIGGER trg_StopYtoN ON dbo.YourTable
AFTER UPDATE
AS
UPDATE YT
SET YourYNColumn = 'Y'
FROM dbo.YourTable YT
JOIN deleted d ON YT.YourIDColumn = d.YourIDColumn
WHERE d.YourYNColumn = 'Y'
AND YT.YourYNColumn = 'N';
GO