0

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

以下是步骤:

  1. 创建表:

    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
    
  2. 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 作业问题。

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

任何帮助将不胜感激!!

4

1 回答 1

1

我不禁注意到你有一个begin tranwith no commit。要么添加一个,要么commit,因为批处理中只有一个语句,所以完全放弃显式事务。

于 2014-02-24T11:27:02.457 回答