2016-09-28 84 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中發生錯誤時回滾事務? –