分享方式:


sp_getbindtoken (Transact-SQL)

適用於:SQL Server

傳回交易的唯一標識碼。 這個唯一標識碼是用來使用 sp_bindsession系結會話的字串。

重要

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

Transact-SQL 語法慣例

語法

sp_getbindtoken [ @out_token = ] 'out_token' OUTPUT
[ ; ]

引數

[ @out_token = ] 'out_token'

用來系結會話的令牌。 @out_token為 varchar(255),沒有預設值。

傳回碼值

無。

結果集

無。

備註

sp_getbindtoken 只有在使用中交易內執行預存程式時,才會傳回有效的令牌。 否則,資料庫引擎 會傳回錯誤訊息。 例如:

-- 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 會傳回相同的令牌。 例如:

USE AdventureWorks2022;
GO

DECLARE @bind_token VARCHAR(255);
BEGIN TRANSACTION;
EXECUTE sp_getbindtoken @bind_token OUTPUT;
SELECT @bind_token AS Token1;
BEGIN DISTRIBUTED TRANSACTION;
EXECUTE sp_getbindtoken @bind_token OUTPUT;
SELECT @bind_token AS Token2;
--COMMIT TRANSACTION;
--COMMIT TRANSACTION;

這兩 SELECT 個語句都會傳回相同的令牌:

Token1
------
PKb'gN5<9aGEedk_16>8U=5---/5G=--

Token2
------
PKb'gN5<9aGEedk_16>8U=5---/5G=--

系結令牌可以搭配 sp_bindsession 使用,將新的會話系結至相同的交易。 系結令牌只能在 資料庫引擎 的每個實例內在本機有效,而且無法跨多個實例共用。

若要取得並傳遞系結令牌,您必須先執行 sp_getbindtoken ,才能執行 sp_bindsession 以共用相同的鎖定空間。 如果您取得系結令牌,請 sp_bindsession 正確執行。

注意

建議您使用 srv_getbindtoken Open Data Services 應用程式開發介面 (API) 來取得系結令牌,以從擴充預存程式使用。

權限

需要 public 角色的成員資格。

範例

下列範例會取得系結令牌,並顯示系結令牌名稱。

DECLARE @bind_token VARCHAR(255);
BEGIN TRANSACTION;
EXECUTE sp_getbindtoken @bind_token OUTPUT;
SELECT @bind_token AS Token;
--COMMIT TRANSACTION;

結果集如下所示。

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