sp_getbindtoken (Transact-SQL)
適用於:SQL Server
傳回交易的唯一標識碼。 這個唯一標識碼是用來使用 sp_bindsession
系結會話的字串。
重要
SQL Server 的未來版本將移除此功能。 請避免在新的開發工作中使用這項功能,並規劃修改目前使用這項功能的應用程式。 請改用多個作用中結果集 (MARS) 或分散式交易。 如需詳細資訊,請參閱在 SQL Server Native Client 使用 Multiple Active Result Sets (MARS)。
語法
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