【问题标题】:how to write trigger?如何编写触发器?
【发布时间】:2025-12-18 15:55:01
【问题描述】:

我正在开发一个在线视频网络应用程序。我想限制在特定时间访问视频。我写了一个触发器,但我遇到了语法不正确的问题。请帮帮我。

CREATE TRIGGER trig_Update_Employee ON [CourseTopic]
FOR SELECT AS

BEGIN

  DECLARE @week int, @hour int
      SET @week = DATEPART(dw, GETDATE())
      SET @hour = DATEPART(hour, GETDATE())
  IF @week = 3 OR @hour > 10 AND @hour > 10
  BEGIN
    ROLLBACK tran
    PRINT 'class timing is over you can not watch this video at this time.'
  END 
END 

【问题讨论】:

  • 您使用的是什么数据库?你在哪一行得到错误?
  • 没有 SELECT 触发器这样的东西。另外,我认为您根本不应该解决数据库上的这个特殊问题。
  • 那么请告诉我如何实现这一目标

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


【解决方案1】:

您不能为 SQL Server 使用 SELECT 触发器(看起来像那种方言)。触发器仅针对记录的数据更改(UPDATE、DELETE、INSERT)触发

您可以通过视图或存储过程或其他代码/客户端检查来实现这一点。

【讨论】:

    【解决方案2】:

    建议将您的业务逻辑改为存储过程。

    这样的东西可以满足您的业务需求:

     CREATE PROC GetVideos
    
     AS
         DECLARE @Now smalldatetime = GETDATE();
    
         SELECT ID, URL FROM Videos
         WHERE  DATEPART(dw, @Now) != 3 
         AND    DATEPART(hour, @Now) <= 10;
    

    【讨论】: