sp_check_for_sync_trigger (Transact-SQL)

適用於:SQL ServerAzure SQL 受控執行個體

判斷使用者定義觸發程式或預存程式是否在用於立即更新訂閱的複寫觸發程式內容中呼叫。 這個預存程式會在發行集資料庫的發行者端或訂閱資料庫的訂閱者端執行。

Transact-SQL 語法慣例

語法

sp_check_for_sync_trigger [ @tabid = ] 'tabid'   
    [ , [ @trigger_op = ] 'trigger_output_parameters' OUTPUT ]  
    [ , [ @fonpublisher = ] fonpublisher ]  

引數

[ @tabid = ] ' tabid '
這是正在檢查之資料表的物件識別碼,以取得立即更新觸發程式。 tabid int ,沒有預設值。

[ @trigger_op = ] ' trigger_output_parameters ' OUTPUT
指定輸出參數是否要傳回其所呼叫的觸發程式類型。 trigger_output_parameters char(10), 可以是下列其中一個值。

Description
Ins INSERT 觸發程式
Upd UPDATE 觸發程式
Del DELETE 觸發程式
Null (預設值)

[ @fonpublisher = ] fonpublisher 指定執行預存程式的位置。 fonpublisher ,預設值為 0。 如果為 0,則執行位於訂閱者端,如果為 1,則執行位於發行者端。

傳回碼值

0 表示預存程式未在立即更新觸發程式的內容中呼叫。 1 表示正在立即更新觸發程式的內容中呼叫,而且是在@trigger_op 傳回的觸發程式類型。

備註

sp_check_for_sync_trigger用於快照式複寫和異動複寫。

sp_check_for_sync_trigger 可用來協調複寫和使用者定義觸發程式。 此預存程式會判斷是否在複寫觸發程式的內容中呼叫它。 例如,您可以在使用者定義觸發程式的主體中呼叫程式 sp_check_for_sync_trigger 。 如果 sp_check_for_sync_trigger 回 0 ,則使用者定義的觸發程式會繼續處理。 如果 sp_check_for_sync_trigger 回 1 ,使用者定義觸發程式就會結束。 這可確保當複寫觸發程式更新資料表時,使用者定義觸發程式不會引發。

範例

A. 將程式碼新增至訂閱者資料表上的觸發程式

下列範例顯示可在訂閱者資料表上的觸發程式中使用的程式碼。

DECLARE @retcode int, @trigger_op char(10), @table_id int  
SELECT @table_id = object_id('tablename')  
EXEC @retcode = sp_check_for_sync_trigger @table_id, @trigger_op OUTPUT  
IF @retcode = 1  
RETURN  

B. 將程式碼新增至發行者資料表上的觸發程式

程式碼也可以新增至發行者資料表上的觸發程式;程式碼很類似,但對 sp_check_for_sync_trigger 呼叫包含額外的參數。

DECLARE @retcode int, @trigger_op char(10), @table_id int, @fonpublisher int  
SELECT @table_id = object_id('tablename')  
SELECT @fonpublisher = 1  
EXEC @retcode = sp_check_for_sync_trigger @table_id, @trigger_op OUTPUT, @fonpublisher  
IF @retcode = 1  
RETURN  

權限

sp_check_for_sync_trigger預存程式可由任何具有 sys.objects 系統檢視中 SELECT 許可權的使用者執行。

另請參閱

Updatable Subscriptions for Transactional Replication