sql - T-SQL : What does "SELECT 1 BEGIN TRANSACTION" mean?

标签 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 子句。你有什么解释吗?

谢谢!

最佳答案

在 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

关于sql - T-SQL : What does "SELECT 1 BEGIN TRANSACTION" mean?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31381708/

相关文章:

sql - 如何在一个 ssms 实例中打开多个 .sql 文件

mysql - 如何连接两个没有主键或唯一键的表?

sql-server - SQL Server MaxDop 不生成并行度

mysql - 子表状态

sql - Postgres 连续天、间隙和岛屿、Tabibitosan

java.sql.SQLException : Invalid state, ResultSet对象被关闭

sql-server - SQL Server 2008 'sp_syspolicy_purge_history' 函数

sql - 如何将文本列值复制到新的非空列

sql - 如何在 SQL Server 中回滚或提交事务

sql - 在单个存储过程中更改表和更新列?