Sql server 如何运行SQL触发器
我是SQL Server 2008的新手,我编写了一个触发器,只希望更新或插入Sql server 如何运行SQL触发器,sql-server,triggers,Sql Server,Triggers,我是SQL Server 2008的新手,我编写了一个触发器,只希望更新或插入hassubproduct和spdisplaytype列,如果它们有值且不为空,则只执行该触发器 感谢您的帮助 CREATE TRIGGER [dbo].[hassubproductcheck] ON [dbo].[products] WITH EXECUTE AS CALLER FOR INSERT, UPDATE AS BEGIN UPDATE products SET hassubproduc
hassubproduct
和spdisplaytype
列,如果它们有值且不为空,则只执行该触发器
感谢您的帮助
CREATE TRIGGER [dbo].[hassubproductcheck]
ON [dbo].[products]
WITH EXECUTE AS CALLER
FOR INSERT, UPDATE
AS
BEGIN
UPDATE products
SET hassubproduct = LTRIM(RTRIM(hassubproduct))
UPDATE products
SET spdisplaytype = LTRIM(RTRIM(spdisplaytype))
END
GO
沿着这些思路的东西可能更像你想要的
CREATE TRIGGER [dbo].[hassubproductcheck] ON [dbo].[products]
WITH EXECUTE AS CALLER FOR INSERT, UPDATE
AS BEGIN
Update p
set hassubproduct = LTRIM(RTRIM(i.hassubproduct))
, spdisplaytype = LTRIM(RTRIM(i.spdisplaytype))
from Products p
join inserted i on i.PrimaryKey = p.PrimaryKey
where i.hassubproduct > ''
OR i.spdisplaytype > ''
END
您必须使用下面的代码来定义触发器。这将有助于进行更新。同样,我们也需要为inserted创建一个
CREATE TRIGGER [dbo].[hassubproductcheck] ON [dbo].products]
AFTER UPDATE
AS
INSERT INTO DBO.SAMPLE_TRIGGER
SELECT hassubproduct, 'UPDATE(PREVIOUS)' [TABLE-UPDATE] FROM DELETED
GO
CREATE TRIGGER [dbo].[hassubproductcheck] ON [dbo].products]
AFTER UPDATE
AS
INSERT INTO DBO.SAMPLE_TRIGGER
SELECT hassubproduct, 'UPDATE (LATEST)' [TABLE-UPDATE] FROM DELETED
GO
触发器正在为每次插入和更新更新更新整个表。您还执行了两个update语句,而1就足够了。嗨,Sean,谢谢您的提示。我已经尝试过了,但我遇到了以下错误:不明确的列名“hassubproduct”。列名称“spdisplaytype”不明确。啊,是的……当然无法测试。您只需要在trim函数中添加插入的别名。我会随时更新。作为最佳实践,我会将该或声明附在()中。然后,当有人后来添加了anotehr和子句时,由于操作的顺序,他们不会得到意外的结果。我不明白你在这里做什么。您有两个名称相同的触发器,select语句是相同的,只是字符串常量已更改。