如何在雪花般的sql server中使用commit,rollback和try catch块进行事务处理?
SQL Server:
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;
答案 0 :(得分:3)
截至今天,Snowflake没有提供相同的结构。我们正在处理一项功能(即将发布非常),如果其中的任何语句失败,则允许中止事务,这应该解决此用例。
答案 1 :(得分:3)
TRANSACTION_ABORT_ON_ERROR会话参数允许返回错误的语句中止非自动提交事务。在该事务内发出的所有语句都会失败,直到执行commit或rollback语句来关闭事务。
https://docs.snowflake.net/manuals/sql-reference/parameters.html#transaction-abort-on-error
答案 2 :(得分:1)
在当前会话中开始交易。
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 |
----------+