如何使用事务与提交,回滚和尝试捕获块在雪花像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 |
----------+