【问题标题】:sql-server trigger join doesnt worksql-server 触发器连接不起作用
【发布时间】:2013-04-03 18:53:47
【问题描述】:

我一直在研究这个触发器,但无法弄清楚。我从这里的人那里得到了一些帮助,取得了很大的进步,但还没有完成。

这是我的加入触发器。插入没有发生....我无法调试,也看不到错误(如果有)。不幸的是,我正在使用 SQL 网络工具

CREATE trigger Posts_Raw_To_Queue_Trigger  ON SendNotificationPostsRaw 
FOR INSERT
AS
BEGIN
  INSERT INTO SendNotificationPostsQueue (UserID,PostID,SpecialityID)
  SELECT I.PostID, I.UserID, P.CategoryId   
  FROM INSERTED AS I JOIN PostCategoryRelations AS P ON I.PostID= P.PostId
END

【问题讨论】:

  • 您加入的 PostCategoryRelations 记录是在同一个事务中写入,还是已经存在?
  • 您在INSERTSELECT 中有不同的顺序:INSERT ...(UserId, PostId,...) SELECT I.PostID,I.UserID。是错字吗?如果没有,它可能会因为违反参照完整性而失败
  • 你是对的,但这并不能解决问题
  • @Andy Nichols ,PostCategoryRelations 记录应该写在这个触发器之前
  • 在触发器执行之前是否有明确的 BEGIN TRANSACTION 启动?如果您从触发器中打印了@@TRANCOUNT 的值,您可以看到这一点。也许你有一个未提交的事务。

标签: sql sql-server insert left-join inner-join


【解决方案1】:

试试这个 -

CREATE TRIGGER dbo.Posts_Raw_To_Queue_Trigger

    ON dbo.SendNotificationPostsRaw

    -- please write this if SendNotificationPostsRaw is table 
    AFTER INSERT
    -- or write this if SendNotificationPostsRaw is view
    INSTEAD OF INSERT

    --FOR INSERT

AS BEGIN

    -- check if thete are any rows
    IF NOT EXISTS(
        SELECT 1 
        FROM INSERTED i
    ) RAISERROR('Nothing to insert', 16, 1)


    INSERT INTO dbo.SendNotificationPostsQueue 
    (
          UserID
        , PostID
        , SpecialityID
    )
    SELECT  
          I.PostID
        , I.UserID
        , P.CategoryID
    FROM INSERTED AS I
    JOIN PostCategoryRelations P ON I.PostID = P.PostId

END

【讨论】:

    猜你喜欢
    • 2015-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多