SQL事务不工作

SQL事务不工作,sql,sql-server,sql-server-2008,tsql,transactions,Sql,Sql Server,Sql Server 2008,Tsql,Transactions,我使用下面的SQL删除记录,并将其插入到事务中的Customers表中。如果insert语句中有错误,我会看到错误消息,当我尝试执行select*from customers时,它不会显示结果集。当我关闭SSMS窗口时,它显示有未提交的事务。是否要在关闭窗口之前提交这些事务? 单击“确定”后,将从表中显示结果。那么,在使用事务时是否存在任何锁定机制 USE CMSDB; BEGIN TRY BEGIN TRAN t1; DELETE FROM Customers

我使用下面的SQL删除记录,并将其插入到事务中的Customers表中。如果insert语句中有错误,我会看到错误消息,当我尝试执行
select*from customers
时,它不会显示结果集。当我关闭SSMS窗口时,它显示有未提交的事务。是否要在关闭窗口之前提交这些事务?

单击“确定”后,将从表中显示结果。那么,在使用事务时是否存在任何锁定机制

USE CMSDB;
BEGIN TRY
    BEGIN TRAN t1;

        DELETE FROM Customers
        print @@trancount -->prints 3 since there are three records
        INSERT INTO CUSTOMERS
        INSERT INTO CUSTOMERd --> error here
        INSERT INTO CUSTOMERS

    COMMIT TRAN t1;
END TRY
BEGIN CATCH 
    print 'hi' --> not printing
    select @@trancount --> not resulting anything
    IF @@TRANCOUNT > 0 
        ROLLBACK TRAN t1;
    -- Error Message
    DECLARE @Err nvarchar(1000)
    SET @Err = ERROR_MESSAGE()
    RAISERROR (@Err,16,1)
END CATCH
GO
信息

(3 row(s) affected)

(1 row(s) affected)

(1 row(s) affected)

(1 row(s) affected)
Msg 208, Level 16, State 1, Line 8
Invalid object name 'dbo.Customerd'.
摘自描述:

以下类型的错误不由CATCH块处理: 它们发生在与TRY…CATCH构造相同的执行级别:

  • 编译错误,如语法错误,会阻止批处理运行

  • 语句级重新编译期间发生的错误,例如编译后由于 延迟名称解析

在这种情况下,发生的是

错误未被捕获,控件从TRY…CATCH中传出 建造到下一个更高的层次


听起来好像在某个时候(在运行最后一批之前),您只突出显示了带有
begintransaction的代码
选择什么@@tracount说?似乎出于某种原因它没有进入捕获。我试图在catch中打印@trancount,但无法打印。只需
选择@trancount独立运行。同样,我认为在某个时刻,您至少执行了一个
BEGIN事务既不提交也不回滚。是的,我记得我开始TRAN时没有回滚。之后,我通过提示消息提交了事务,并且能够检索记录。只需选择@@trancount也不提供任何结果集。你说“不提供任何结果集”是什么意思?它的行为是否也被阻止(状态窗口显示“正在执行查询…”)?还是说它返回零?请明确,记住我们看不到您的屏幕。