Dans Sql Server 2008 r2, j'ai une table appelée Emp, et j'essaye de mettre à jour certaines valeurs dans une transaction (tran externe), maintenant après la mise à jour et avant le commit, j'ai commencé une autre transaction, dans laquelle j'ai essayé de sélectionner les données de la même table (Emp) mais via un serveur lié loopback. le look tsql comme ceci:une instruction select dans une transaction contre un serveur lié loopback ne s'arrête jamais
USE MASTER
GO
EXEC sp_addlinkedserver @server = N'loopback',@srvproduct=N'',@provider = N'SQLNCLI', @datasrc = @@SERVERNAME,@catalog = 'MstrDtl'
GO
EXEC sp_serveroption loopback,N'remote proc transaction promotion','FALSE'
Go
create SYNONYM loopy FOR loopback.MstrDtl.dbo.Emp
use MstrDtl
BEGIN TRAN OuterTran
BEGIN
update table dbo.Emp set Salary = 123456 where Name='abcdx'
BEGIN TRAN InnerTran
select Salary from loopy where Name = 'abcdx'
COMMIT TRAN InnerTran
ROLLBACK TRAN OuterTran
END
j'ai donc deux questions:
- peut-je obtenir des anciennes valeurs (les lignes affectées à la mise à jour) dans la requête pour loopback à l'intérieur du InnerTran en utilisant cette façon ?
- la requête ne s'arrête jamais, aucune idée?