Share via


sp_getbindtoken (Transact-SQL)

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

重要注意事項重要事項

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

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

語法

sp_getbindtoken [@out_token =] 'return_value' OUTPUT 

引數

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

傳回碼值

結果集

備註

在 SQL Server 2000 和更新的版本中,只有在預存程序執行於使用中的交易內時,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.

[!附註]

在 SQL Server 7.0 中,sp_getbindtoken 會傳回有效的 Token,即使預存程序在使用中的交易之外執行,也是如此。上述範例在 SQL Server 7.0 中運作,但在 SQL Server 2000 或更新的版本中,無法運作。

當利用 sp_getbindtoken,在開啟的交易內加入分散式交易連接時,SQL Server 2000 或更新的版本會傳回相同的 Token。例如:

USE AdventureWorks;
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