J'ai deux serveurs: SQLSERVER01
et SQLSERVER02
et je suis en train de données mises à jour sur SERVER01
de SERVER02
(SERVER01
est un serveur lié).mise à jour d'une table sur un serveur lié à l'aide OPENQUERY
Ma requête de mise à jour est actuellement dynamique qui ressemble à ceci
DECLARE @SQL NVARCHAR(MAX)
DECLARE @ID INT
SET @ID = 1
Set @SQL = 'Update SERVER01.MyDatbase.dbo.MyTable
set ModifiedDate = GetDate(), SomeOtherValue = ''xyz''
Where Id = ' Convert(varchar(10), @ID)
Si je l'appelle maintenant
EXEC(@SQL)
il fonctionnera parfois, mais d'autres fois il va juste y accrocher pour les âges et quand Je cours sp_active
je vois PREEMPTIVE_OLEDBOPS
.
Donc, je puis essayé d'utiliser la requête comme suit ouverte
Select *
From OpenQuery(SERVER01,
'Update SERVER01.MyDatbase.dbo.MyTable
set ModifiedDate = GetDate(), SomeOtherValue = ''xyz''
Where Id = 1')
mais je reçois cette erreur:
The OLE DB provider "SQLNCLI11" for linked server "SERVER01" indicates that either the object has no columns or the current user does not have permissions on that object.
Quand je lance la requête de sélection suivante je reviens avec succès la ligne que je suis en train mettre à jour:
Select *
From OpenQuery(SERVER01,
'Select *
From SERVER01.MyDatbase.dbo.MyTable
Where Id = 1')
Je sais que l'utilisateur qui exécute la requête a des autorisations, mais je reall Je ne sais pas où aller à partir d'ici. J'ai lu quelque part que cette erreur a quelque chose à voir avec la requête de mise à jour ne retournant pas une ligne. Y a-t-il une vérité à cela?
Comment puis-je résoudre ce problème?
Merci