2

如何使用事务提交、回滚并尝试在雪花中捕获块,如 sql server?

SQL 服务器:

BEGIN TRY
    BEGIN TRANSACTION 
        --Insert statement 1
        --Insert statement 2
    COMMIT
END TRY
BEGIN CATCH

    IF @@TRANCOUNT > 0
        ROLLBACK
END CATCH

根据雪花文档,我们可以像这样使用事务。

BEGIN TRANSACTION NAME T1;
-- Insert statement 1;
-- Insert statement 2;
COMMIT;
4

3 回答 3

3

TRANSACTION_ABORT_ON_ERROR 会话参数允许返回错误的语句中止非自动提交事务。在该事务中发出的所有语句都会失败,直到执行提交或回滚语句以关闭事务。

https://docs.snowflake.net/manuals/sql-reference/parameters.html#transaction-abort-on-error

于 2017-03-03T14:52:17.577 回答
3

截至今天,Snowflake 不提供等效的构造。我们正在开发一项功能(即将发布),如果其中的任何语句失败,则允许中止事务,这应该解决这个用例。

于 2016-09-28T16:56:26.803 回答
2

在当前会话中开始事务。

BEGIN [ WORK | TRANSACTION ] [ NAME <name> ]
START TRANSACTION [ NAME <name> ]

例子

BEGIN TRANSACTION NAME T1;

SELECT CURRENT_TRANSACTION();

-----------------------+
 CURRENT_TRANSACTION() |
-----------------------+
 1432071497832         |
-----------------------+

INSERT INTO A1 VALUES (1), (2);

-------------------------+
 number of rows inserted |
-------------------------+
 2                       |
-------------------------+

COMMIT;

回滚

SELECT COUNT(*) FROM A1;

----------+
 COUNT(*) |
----------+
 0        |
----------+

BEGIN NAME T4;

SELECT CURRENT_TRANSACTION();

-----------------------+
 CURRENT_TRANSACTION() |
-----------------------+
 1432071523422         |
-----------------------+

INSERT INTO A1 VALUES (1), (2);

-------------------------+
 number of rows inserted |
-------------------------+
 2                       |
-------------------------+

ROLLBACK;

SELECT COUNT(*) FROM A1;

----------+
 COUNT(*) |
----------+
 0        |
----------+
于 2016-12-14T12:41:28.630 回答