Share via


sp_getbindtoken (Transact-SQL)

傳回交易的唯一識別碼。 這個唯一識別碼是利用 sp_bindsession 來繫結工作階段時所用的字串。

重要事項重要事項

未來的 Microsoft SQL Server 版本將移除這項功能。請避免在新的開發工作中使用這項功能,並規劃修改目前使用這項功能的應用程式。 請改用 Multiple Active Result Set (MARS) 或分散式交易。 如需詳細資訊,請參閱<使用 Multiple Active Result Sets (MARS)>。

主題連結圖示 Transact-SQL 語法慣例

語法

sp_getbindtoken [@out_token =] 'return_value' OUTPUT 

引數

  • [@out_token= ]'return_value'
    這是用來繫結工作階段的 Token。 return_value 是 varchar(255),沒有預設值。

傳回碼值

結果集

備註

只有在預存程序於使用中的交易內執行時,sp_getbindtoken 才會傳回有效的 Token。 否則,Database Engine 會傳回錯誤訊息。 例如:

-- Declare a variable to hold the bind token.
-- No active transaction.
DECLARE @bind_token varchar(255);
-- Trying to get the bind token returns an error 3921.
EXECUTE sp_getbindtoken @bind_token OUTPUT;
Server: Msg 3921, Level 16, State 1, Procedure sp_getbindtoken, Line 4
Cannot get a transaction token if there is no transaction active.
Reissue the statement after a transaction has been started.

若使用 sp_getbindtoken 在開啟的交易內加入分散式交易連接,則 SQL Server 會傳回相同的 Token。 例如:

USE AdventureWorks2012;
GO
DECLARE @bind_token varchar(255);

BEGIN TRAN;

EXECUTE sp_getbindtoken @bind_token OUTPUT;
SELECT @bind_token AS Token;

BEGIN DISTRIBUTED TRAN;

EXECUTE sp_getbindtoken @bind_token OUTPUT;
SELECT @bind_token AS Token;

兩個 SELECT 陳述式都會傳回相同的 Token:

Token
-----
PKb'gN5<9aGEedk_16>8U=5---/5G=--
(1 row(s_) affected)

Token
-----
PKb'gN5<9aGEedk_16>8U=5---/5G=--
(1 row(s_) affected)

繫結 Token 可以搭配 sp_bindsession,用來將新工作階段繫結到相同的交易。 繫結 Token 只在每個 Database Engine 執行個體的本機環境內有效,不同的執行個體並不能共用它。

若要取得並傳遞繫結 Token,您必須先執行 sp_getbindtoken,再執行 sp_bindsession,才能共用相同的鎖定空間。 如果您取得繫結 Token,就能夠正確執行 sp_bindsession。

[!附註]

我們建議您利用 srv_getbindtoken 開放式資料服務 (Open Data Services) 應用程式開發介面 (API),從擴充預存程序中取得要使用的繫結 Token。

權限

需要 public 角色中的成員資格。

範例

下列範例會取得繫結 Token,且會顯示繫結 Token 名稱。

DECLARE @bind_token varchar(255);
BEGIN TRAN;
EXECUTE sp_getbindtoken @bind_token OUTPUT;
SELECT @bind_token AS Token;

以下為結果集:

Token

----------------------------------------------------------

\0]---5^PJK51bP<1F<-7U-]ANZ

請參閱

參考

sp_bindsession (Transact-SQL)

系統預存程序 (Transact-SQL)

srv_getbindtoken (擴充預存程序 API)