sp_getbindtoken (Transact-SQL)
傳回交易的唯一識別碼。 這個唯一識別碼是利用 sp_bindsession 來繫結工作階段時所用的字串。
重要事項 |
---|
未來的 Microsoft SQL Server 版本將移除這項功能。請避免在新的開發工作中使用這項功能,並規劃修改目前使用這項功能的應用程式。 請改用 Multiple Active Result Set (MARS) 或分散式交易。 如需詳細資訊,請參閱<使用 Multiple Active Result Sets (MARS)>。 |
語法
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