如何在雪花中使用事务



如何使用事务与提交,回滚和尝试捕获块在雪花像sql server?

SQL服务器:

BEGIN TRY
    BEGIN TRANSACTION 
        --Insert statement 1
        --Insert statement 2
    COMMIT
END TRY
BEGIN CATCH
    IF @@TRANCOUNT > 0
        ROLLBACK
END CATCH

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

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

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

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

到目前为止,Snowflake还没有提供等效的构造。我们正在开发一个特性(即将发布非常很快),允许在事务中的任何语句失败时中止事务,这应该可以解决这个用例。

在当前会话中开始一个事务。

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        |
----------+

相关内容

  • 没有找到相关文章

最新更新