2015-09-09 1 views
1

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

Répondre

1

D'accord, j'ai trouvé la réponse. Cela fonctionne avec succès:

execute (@SQL) at SERVER01