patternsqlMinor
Optimistic concurrency check failure when updating linked server table with timestamp column
Viewed 0 times
timestampfailureservertablewithupdatingcolumnwhenconcurrencycheck
Problem
I’m trying to update a table in a database on a linked server using code like this:
The remote server is also a SQL Server instance and is defined thus:
```
EXEC master.dbo.sp_addlinkedserver @server = N'RemoteServer'
, @srvproduct=N'SQL Server'
/* For security reasons the linked server remote logins password is
changed with ######## */
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'RemoteServer'
,@useself=N'False'
,@locallogin=NULL
,@rmtuser=N'sa'
,@rmtpassword='########'
GO
EXEC master.dbo.sp_serveroption @server=N'RemoteServer'
, @optname=N'collation compatible', @optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'RemoteServer'
, @optname=N'data access', @optvalue=N'true'
GO
EXEC master.dbo.sp_serveroption @server=N'RemoteServer'
, @optname=N'dist', @optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'RemoteServer'
, @optname=N'pub', @optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'RemoteServer'
, @optname=N'rpc', @optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'RemoteServer'
, @optname=N'rpc out', @optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'RemoteServer'
, @optname=N'sub', @optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'RemoteServer'
, @optname=N'connect timeout', @optvalue=N'0'
GO
EXEC master.dbo.sp_serveroption @server=N'RemoteServer'
, @optname=N'collation name', @optvalue=null
GO
EXEC master.dbo.sp_serveroption @server=N'RemoteServer'
, @optname=N'lazy schema validation', @optvalue=N'false'
GO
EXEC
declare @FirstName nvarchar(30);
declare @LastName nvarchar(50);
declare @AccountNumber nvarchar(30);
set @FirstName = N'John';
set @LastName = N'Smith';
set @AccountNumber = N'ABC001';
update RemoteServer.MyDB.dbo.Customer
set FirstName = @FirstName,
LastName = @LastName
where AccountNumber = @AccountNumber;The remote server is also a SQL Server instance and is defined thus:
```
EXEC master.dbo.sp_addlinkedserver @server = N'RemoteServer'
, @srvproduct=N'SQL Server'
/* For security reasons the linked server remote logins password is
changed with ######## */
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'RemoteServer'
,@useself=N'False'
,@locallogin=NULL
,@rmtuser=N'sa'
,@rmtpassword='########'
GO
EXEC master.dbo.sp_serveroption @server=N'RemoteServer'
, @optname=N'collation compatible', @optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'RemoteServer'
, @optname=N'data access', @optvalue=N'true'
GO
EXEC master.dbo.sp_serveroption @server=N'RemoteServer'
, @optname=N'dist', @optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'RemoteServer'
, @optname=N'pub', @optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'RemoteServer'
, @optname=N'rpc', @optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'RemoteServer'
, @optname=N'rpc out', @optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'RemoteServer'
, @optname=N'sub', @optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'RemoteServer'
, @optname=N'connect timeout', @optvalue=N'0'
GO
EXEC master.dbo.sp_serveroption @server=N'RemoteServer'
, @optname=N'collation name', @optvalue=null
GO
EXEC master.dbo.sp_serveroption @server=N'RemoteServer'
, @optname=N'lazy schema validation', @optvalue=N'false'
GO
EXEC
Solution
Do the update remotely:
Must enable RPC and RPC Out on the linked server.
exec RemoteServer.MyDB.dbo.sp_executesql N'UPDATE Customer
set FirstName = @FirstName,
LastName = @LastName
where AccountNumber = @AccountNumber',
N'@FirstName varchar(...), @LastName varchar(...), @AccountNumber ',
@FirstName, @LastName, @AccountNumber;Must enable RPC and RPC Out on the linked server.
Code Snippets
exec RemoteServer.MyDB.dbo.sp_executesql N'UPDATE Customer
set FirstName = @FirstName,
LastName = @LastName
where AccountNumber = @AccountNumber',
N'@FirstName varchar(...), @LastName varchar(...), @AccountNumber <type>',
@FirstName, @LastName, @AccountNumber;Context
StackExchange Database Administrators Q#34139, answer score: 2
Revisions (0)
No revisions yet.