2016-09-28 85 views
1

如何使用事务与提交,回滚和try雪花像sql服务器的catch块?如何在雪花中使用交易?

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; 

回答

3

从今天起,Snowflake没有提供相同的结构。我们正在研究一个功能(即将发布),如果其中的任何语句失败,允许终止一个事务,这应该解决这个用例。

0

开始当前会话中的事务。

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

如何在T1中发生错误时回滚事务? –