2010-06-30 10 views
0

J'ai deux serveurs SQL liés et j'essaie d'émettre une mise à jour sur l'autre serveur, mais je reçois une erreur "Statement (s) n'a pas pu être préparé.", Suivi par "Doit déclarer le variable scalaire « @Shipper_Nbr » »Mettre à jour le serveur SQL lié avec les paramètres

la syntaxe j'utilise est:

update DBSERVER.DBNAME.DBO.TABLE set Field = @Value WHERE ID = @id 

Quelle est la bonne façon de le faire?

MISE À JOUR:

J'ai essayé d'utiliser une procédure stockée et obtenir le même résultat. Aussi, j'ai remarqué des informations supplémentaires. La syntaxe vérifie, je reçois seulement l'erreur quand j'essaye de sauver la procédure stockée. En outre, j'ai remarqué que l'erreur indique également "Fournisseur OLE DB" SQLNCLI "pour le serveur lié" WARSQLVS01 "a renvoyé le message" préparation différée n'a pas pu être terminée. "

ACK - je l'ai compris. C'était une ligne séparée où j'essayais de passer le paramètre à partir de l'instruction select OPENQUERY. Désolé pour ça! : - \

+2

C'est une erreur étrange pour obtenir, compte tenu @Shipper_Nbr ne se présente pas dans le code que vous avez présenté. Y en a-t-il d'autres que vous pouvez partager avec nous? –

+0

J'essayais de le garder générique. Voici la déclaration réelle: \t \t MISE À JOUR \t WARSQLVS01.ISS3_AND_DHAM_PROD.dbo.ISS_AND_data_Shipments \t \t SET \t \t Arrive_DT = @Actual_DateTime \t \t OÙ \t Shipper_Nbr = @Shipper_Nbr et \t \t \t \t CONTAINER_NAME = @Container_Name – Josh

Répondre

0

Etes-vous sûr que le problème est avec le lien du serveur, et pas quelque chose sur le reste de votre instruction SQL? Où est attribuée la valeur @Shipper_Nbr?

+0

Oui - @Shipper_Nbr est juste un paramètre de la procédure stockée. Il est utilisé à d'autres endroits dans la procédure stockée, mais indique seulement une erreur sur cette instruction. – Josh

+0

Postez le code de procédure complète – Madhivanan

+1

Non, mais je posterai l'en-tête pour prouver que la variable est déclarée. PROCEDURE alter [dbo] [CSN_UpdatePoints_InTransit] ( \t @Shipper_Nbr \t \t varchar (6), \t @ CONTAINER_NAME \t \t varchar (5), \t @Point \t \t \t \t décimal (3,0), \t @Actual_DateTime \t datetime, \t @CustomerID \t \t \t varchar (30) = 'SHAP' ) – Josh

1

Vous ne savez pas exactement quel est ce problème, mais nous avons dû contourner des problèmes similaires en configurant un proc stocké sur le serveur distant et en l'appelant, plutôt que d'essayer de manipuler les éléments sur le serveur distant localement.

0

Se si cela fonctionne

UPDATE T 
SET Arrive_DT = @Actual_DateTime 
WHERE Shipper_Nbr = @Shipper_Nbr and Container_Name = @Container_Name 
FROM WARSQLVS01.ISS3_AND_DHAM_PROD.dbo.ISS_AND_data_Shipments as T 
+0

Cela me donne: Syntaxe incorrecte près du mot-clé 'FROM' – Josh

+1

Ouais, la clause FROM vient généralement avant la clause WHERE ... – ErikE

Questions connexes