SQL事务不工作
我使用下面的SQL删除记录,并将其插入到事务中的Customers表中。如果insert语句中有错误,我会看到错误消息,当我尝试执行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
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构造相同的执行级别:
- 编译错误,如语法错误,会阻止批处理运行
- 语句级重新编译期间发生的错误,例如编译后由于 延迟名称解析
听起来好像在某个时候(在运行最后一批之前),您只突出显示了带有
begintransaction的代码代码>。选择什么@@tracount代码>说?似乎出于某种原因它没有进入捕获。我试图在catch中打印@trancount,但无法打印。只需选择@trancount代码>独立运行。同样,我认为在某个时刻,您至少执行了一个BEGIN事务代码>既不提交也不回滚。是的,我记得我开始TRAN时没有回滚。之后,我通过提示消息提交了事务,并且能够检索记录。只需选择@@trancount也不提供任何结果集。你说“不提供任何结果集”是什么意思?它的行为是否也被阻止(状态窗口显示“正在执行查询…”)?还是说它返回零?请明确,记住我们看不到您的屏幕。