我的問題:
表dbo.student有StudentID喜歡SV001。
如何創建觸發器來檢查插入的資料dbo.student是否具有以000 到 100StudentID開頭SV的數字?
示例:SV099要插入的 ID 是有效的,而SV101無效的
uj5u.com熱心網友回復:
使用 SQL 約束:
CHECK (CAST(SUBSTRING(StudentID, 3, LEN(StudentID)) AS int) <= 100)
例子 :
CREATE TABLE tb
(
StudentID varchar(10)
CHECK (CAST(SUBSTRING(StudentID, 3, LEN(StudentID)) AS int) <= 100)
);
// test data
INSERT INTO tb VALUES ('sv000'); //valid
INSERT INTO tb VALUES ('sv100'); //valid
INSERT INTO tb VALUES ('sv101'); //invalid
db<>fiddle 中的演示
或者,如果您想使用觸發器:
注意:必須使用inserted關鍵字來訪問剛剛添加的記錄
CREATE TRIGGER TriggerStudentID
ON tb
AFTER INSERT
AS
BEGIN
DECLARE @StudentID varchar(10);
SET @StudentID = (SELECT TOP 1 StudentID FROM inserted);
IF (CAST(SUBSTRING(@StudentID, 3, LEN(@StudentID)) AS int) > 100)
ROLLBACK TRANSACTION
END
db<>fiddle 中的演示。
或者您可以使用以下觸發器
Create Trigger TriggerStudentID
On tb
AFTER INSERT
As
Begin
Declare @StudentID varchar(10);
DECLARE my_Cursor CURSOR FOR SELECT StudentID FROM INSERTED;
OPEN my_Cursor;
FETCH NEXT FROM my_Cursor INTO @StudentID;
WHILE @@FETCH_STATUS = 0
BEGIN
FETCH NEXT FROM my_Cursor INTO @StudentID;
If (CAST(SUBSTRING(@StudentID,3,LEN(@StudentID)) AS int) > 100)
RollBack Transaction
END
CLOSE my_Cursor;
DEALLOCATE my_Cursor;
END
db<>fiddle 中的演示。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/371547.html
標籤:sql sql-server 查询语句 触发器
上一篇:本地到云漏洞掃描
下一篇:組或交叉功能
