Sql server 如何运行SQL触发器

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

我是SQL Server 2008的新手,我编写了一个触发器,只希望更新或插入
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语句是相同的,只是字符串常量已更改。