SQL 作业卡在执行 SQL 合并?

Posted

技术标签:

【中文标题】SQL 作业卡在执行 SQL 合并?【英文标题】:SQL Job stuck executing an SQL Merge? 【发布时间】:2014-02-24 07:47:12 【问题描述】:

我在 SQL Server 2008 上创建了一个两步作业,该作业创建一个表,然后执行一个 MERGE 命令。

步骤如下:

    创建表:

    CREATE TABLE CSVTable (AccountID INTEGER, UserType NVARCHAR (50), 
                           Lname NVARCHAR (50), Fname NVARCHAR (50), Mname NVARCHAR (50), 
                           Address NVARCHAR (100), Gender NVARCHAR (10), Birthdate DATE,
                           ContactNo NVARCHAR (50), Email NVARCHAR (50), Password NVARCHAR(30), EPurseBalance FLOAT, AccountStatus NVARCHAR (50))
    GO
    

    SQL 合并:

    BEGIN TRAN;
    
    MERGE tblAccount AS T
    USING CSVTable AS S ON (T.AccountID = S.AccountID) 
    
    WHEN NOT MATCHED BY TARGET
       THEN INSERT(AccountID, UserType, Lname, Fname, Mname, Address, Gender, 
                   Birthdate, ContactNo, Email, Password, Balance, AccountStatus) 
            VALUES(S.AccountID, S.UserType, S.Lname, S.Fname, S.Mname, S.Address, S.Gender, 
                   S.Birthdate, S.ContactNo, S.Email, S.Password, S.Balance, S.AccountStatus)
    
    WHEN MATCHED 
       THEN UPDATE SET T.AccountStatus = S.AccountStatus;
    GO
    

这样做的问题是 SQL 作业需要永远执行。它以某种方式进入了一个无法逃脱的循环。 然而Merge 命令如果作为普通查询执行,则可以完美运行。我不知道是什么导致了这个 SQL Job 问题。

有人可以帮助我吗?当我完成这篇文章时,这项工作仍在执行。

任何帮助将不胜感激!

【问题讨论】:

【参考方案1】:

我不禁注意到您有一个 begin tran 没有 commit。要么添加commit,要么由于批处理中只有一条语句,因此完全放弃显式事务。

【讨论】:

谢谢!我完全忘记了提交交易! :)

以上是关于SQL 作业卡在执行 SQL 合并?的主要内容,如果未能解决你的问题,请参考以下文章

SQL 2005 作业执行:TCP/IP 与命名管道

SQL Server 代理作业:如何在不执行整个作业的情况下执行作业步骤

使用T-SQL找出执行时间过长的作业

数据库定时执行sql mysql定时任务 event 执行定时任务 和sql server定时任务 作业执行定时任务

从存储过程执行 SQL Server 代理作业并返回作业结果

sql server:如何设置自动执行的存储过程?