我需要一个触发器来防止某些数据插入表中根据条件,在插入表中的任何行之前就像这段代码一样
create Trigger trigger_name
on table_name
for insert
AS
Begin
if (true)
insert into table_name values ()
End
答案 0 :(得分:1)
Instead of Trigger
(使用INSTEAD OF CLAUSE)
此类型的触发器在SQL Server开始执行之前触发 解雇它的行动。这与AFTER触发器不同 在导致它发射的动作之后发射。我们可以有一个INSTEAD 在成功执行的表上插入/更新/删除触发器 但不包括对表格的实际插入/更新/删除。
<强>语法:强>
CREATE TRIGGER trigger_nameON {table|view}
[WITH ENCRYPTION|EXECUTE AS]
{FOR|AFTER|INSTEAD OF}
{[CREATE|ALTER|DROP|INSERT|UPDATE|DELETE ]}
[NOT FOR REPLICATION]
AS sql_statement [1...n ]
触发应该像
CREATE TRIGGER trigger_name
ON table_name
instead OF INSERT
AS
BEGIN
IF (true)
INSERT INTO table_name VALUES ()
END
答案 1 :(得分:0)
使用Instead Of Insert trigger
和exists
运算符验证符合条件的行
CREATE TRIGGER trigger_name
ON table_name
Instead OF INSERT
AS
BEGIN
INSERT INTO table_name
SELECT *
FROM inserted
WHERE EXISTS (SELECT 1
WHERE condtion = true)
END
答案 2 :(得分:0)
您是否尝试使用检查约束而不是触发器? 这是他们的预期目的。应用简单的条件来防止插入/更新不符合业务逻辑的数据。