【问题标题】:Trying to create a trigger for a table尝试为表创建触发器
【发布时间】:2015-03-11 16:48:34
【问题描述】:

我有一个由 4 列组成的表 [dbo].[main]

  • 电影类型
  • 音乐类型
  • 播客类型
  • 组合列

我想创建一个触发器,如果​​在 MovieGenrePodcastGenreMusicGenre 中插入任何内容,它也会插入到 CombinedColumn 中。

CREATE TRIGGER trgAfterInsert ON [dbo].[Main]
FOR INSERT
AS
???
GO

【问题讨论】:

  • MySQL 还是 SQL Server?
  • 语法不是mysql。
  • 我很抱歉我想要 sql server。
  • 应该如何“组合”?您很可能只需要一个计算列 - 根本不需要触发器..
  • 这听起来像是在 presentation 层而不是需要存储在数据库中的 data 层更好地处理。是否有任何理由不应该在适当的屏幕/报告中生成第 4 列?

标签: sql-server sql-server-2008 triggers


【解决方案1】:

--dbo.main` 需要一个键列(假设它是一个标识列'id1') 创建触发器 trgAfterInsert 开 [dbo].[主要] 插入为 声明@allcols varchar(500)

         declare @key1 int

         set @key1 = ident_current('dbo.main')

         select  @allcols = MovieGenre+' '+ PodcastGenre+' '+ MusicGenre from inserted

 update dbo.main set CombindedColumn= @allcols where id1  = @key1

【讨论】:

  • 首先感谢您的回复。我不希望组合列是其他 3 列的连接,例如:组合列应该“堆叠”值:所以它将是:组合列:Movie1 Pod1 Music1 而不是:Movie1+Pod1+Music1
【解决方案2】:

好的,这将一个接一个地向组合列添加值。根据需要“堆叠”它们:

CREATE TRIGGER trgAfterInsert on dbo.main
AFTER INSERT
AS
    INSERT INTO yourTable(CombinedColumn)
    SELECT MovieGenre
    FROM inserted
    UNION ALL
    SELECT PodcastGenre
    FROM inserted
    UNION ALL
    SELECT MusicGenre
    FROM inserted
GO

【讨论】:

  • 首先感谢您的回复。我不希望组合列是其他 3 列的连接,例如:组合列应该“堆叠”值:所以它将是:组合列:Movie1 Pod1 Music1 而不是:Movie1+Pod1+Music1
  • 啊,我明白了。 CombinedColumn在哪个表?
  • marc_s 是正确的(我的触发器是不必要的) - 使用计算列。只有在更新另一个表时才需要触发器。
  • 计算列不会一个接一个地插入值。
  • 是的,试试我的触发器。它应该做你想做的事。
猜你喜欢
  • 1970-01-01
  • 2020-06-26
  • 1970-01-01
  • 1970-01-01
  • 2023-01-19
  • 2016-09-18
  • 1970-01-01
  • 2011-03-09
  • 2021-10-16
相关资源
最近更新 更多