T-SQL:" SELECT 1 BEGIN TRANSACTION"意思?

时间:2015-07-13 11:05:44

标签: sql sql-server tsql error-handling

我得到了这个用于错误处理的T-SQL代码:

IF @@TRANCOUNT = 0
BEGIN
    INSERT INTO #tmpErrors (Error)
    SELECT 1
    BEGIN TRANSACTION
END

我知道它会在 #tmpErrors 表中插入1以标记发生了错误。 但我无法理解以下句子:

SELECT 1 BEGIN TRANSACTION

我一直认为BEGIN TRANSACTION本身就是一个可执行语句,但现在看起来似乎是伪FROM子句。你有任何解释吗?

谢谢!

2 个答案:

答案 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命令无关...