Groups | Blog | Home
all groups > sql server programming > august 2006 >

sql server programming : Side Clash in distributed transaction Statement


Erland Sommarskog
8/19/2006 11:01:00 PM
Bishoy George (bishoy@bishoy.com) writes:

[quoted text, click to view]

Troubleshooting linked-server problems is often very difficult, not the
least because the error messages are very obscure, and also, as in this
case, truncated.

Can you update the password for a single user from the client-side?

Is EmployeeID defined as a primary key in the target table?

If you try:

UPDATE [ServerName].DBName.dbo.Employees
SET Password = (SELECT ls.Psssword
FROM dbo.Employees AS le
WHERE re.EmployeeId = le.EmployeeId
AND le.IsUpdated = 1)
FROM [ServerName].DBName.dbo.Employees AS re

this have any better success?

You could also try running a Profiler trace against the target server,
if that gives any clues. (Not very likely, but...)

--
Erland Sommarskog, SQL Server MVP, esquel@sommarskog.se

Books Online for SQL Server 2005 at
http://www.microsoft.com/technet/prodtechnol/sql/2005/downloads/books.mspx
Books Online for SQL Server 2000 at
Bishoy George
8/19/2006 11:27:18 PM
Hi,
I have a distributed transaction statement that updates an SQL server
instance on Windows Server 2003 from another SQL server instance on Windows
XP SP2.

Both servers a linked to each other.

The DB is the same on server and client.

I use SQL Server 2000 with SP3 on both server and client.

Update statement from client side:
update re
set re.[Password] = le.[Password]
from [ServerName].DBName.dbo.Employees as re inner join dbo.Employees as le
on re.EmployeeId = le.EmployeeId
where le.IsUpdated = 1

Update statement from Server Side:
update re
set re.[Password] = le.[Password]
from dbo.Employees as re inner join [ClientName].DBName.dbo.Employees as le
on re.EmployeeId = le.EmployeeId
where le.IsUpdated = 1

When I try to execute the statement from the server side it runs
successfully.

When I try to execute the statement from the client side it gives me this
error:
Server: Msg 7306, Level 16, State 2, Line 1
Could not open table '"DBName"."dbo"."Employees"' from OLE DB provider
'SQLOLEDB'. The provider could not support a row lookup position. The
provider indicates that conflicts occurred with other properties or
requirements.
[OLE/DB provider returned message: Multiple-step OLE DB operation generated
errors. Check each OLE DB status value, if available. No work was done.]
OLE DB error trace [OLE/DB Provider 'SQLOLEDB' IOpenRowset::OpenRowset
returned 0x80040e21: [PROPID=DBPROP_BOOKMARKS VALUE=True
STATUS=DBPROPSTATUS_CONFLICTING], [PROPID=DBPROP_COMMANDTIMEOUT VALUE=600
STATUS=DBPROPSTATUS_OK], [PROPID=Unknown PropertyID VALUE=True
STATUS=DBPROPSTATUS_OK], [PROPID=DBPROP_IRowsetLocate VALUE=True
STATUS=DBPROPSTATUS_CONFLICTING], [PROPID=DBPROP_IRowsetChange VA...

Thank you.
Bishoy

Bishoy George
8/21/2006 12:21:17 AM
[quoted text, click to view]

--------------------------------------------------------------------------------

Thanks alot, you helped me very much.
Once I set the primary key in the Server Table, The query run successfully.

Many thanks again.
Bishoy

AddThis Social Bookmark Button