我得到了这个用于错误处理的T-SQL代码:
IF @@TRANCOUNT = 0
BEGIN
INSERT INTO #tmpErrors (Error)
SELECT 1
BEGIN TRANSACTION
END
我知道它会在 #tmpErrors 表中插入1以标记发生了错误。 但我无法理解以下句子:
SELECT 1 BEGIN TRANSACTION
我一直认为BEGIN TRANSACTION本身就是一个可执行语句,但现在看起来似乎是伪FROM子句。你有任何解释吗?
谢谢!
答案 0 :(得分:4)
在SQL Server中,select
语句不需要from
子句。
select 1
本身就是一个完整的陈述,但在这种情况下,它与insert into
一起使用。
begin transaction
是一个单独的声明。
基本上该声明说“如果没有当前事务,请记录并创建事务。”
IF @@TRANCOUNT = 0 -- if no current transaction
BEGIN
-- insert "1" into #tmpErrors
INSERT INTO #tmpErrors (Error)
SELECT 1
-- Begin a transaction
BEGIN TRANSACTION
END
答案 1 :(得分:4)
它有点脱离上下文但我认为这应该检查是否有任何事务处于活动状态。如果没有事务处于活动状态:记录错误并启动事务。
此块插入错误标志:
INSERT INTO #tmpErrors (Error)
SELECT 1
这会启动一个新的交易:
BEGIN TRANSACTION
所以SELECT 1
属于insert语句,与跟随begin transaction
命令无关...