0
votes

Erreur de syntaxe à l'aide de la clause dans une requête de mise à jour

J'utilise un constructeur de requête pour générer des SQL pour plusieurs dialectes.

La requête suivante me donne une erreur et je n'arrive pas à comprendre ce que le problème est: xxx

Erreur # 46010 sur la ligne 1, Colonne 66: Syntaxe incorrecte près de "objec_id".

"objec_id" est dans des guillemets car certaines colonnes ont été nommées d'après des mots-clés existants dans certains dialectes, il devrait donc rester de cette façon.

J'ai déjà essayé de citer et non vouloir les spécificateurs de la table, retirez-les. Il "fonctionne" si je supprimais la clause où il est donc définitivement là-bas.

EDIT: je n'ai pas la commande exacte de la table Create, mais voici une capture d'écran de toutes les définitions de colonne (les champs en caractères gras sont Obligatoire):

 Entrez la description de l'image ici

EDIT 2: Il existe des déclencheurs sur la table, mais uniquement sur la mise à jour des horodatages. Il y a à coup sûr de déclencheurs sur "Langname". Ce n'est pas non plus un champ unique. C'est le reste que je connais sur la table:

 Entrez la description de l'image ici


4 commentaires

S'il vous plaît partager dbo.Object Définition ( Créer une table )


Vous pouvez écrire uniquement le nom de la colonne dans la condition comme update dbo.Object Set LangName = 'foobar' où objec_id in (69, 42, 1337) J'ai testé cette syntaxe sur aventurework2017


Avez-vous des déclencheurs sur cette table? Il y a quelque chose de causer l'erreur que vous ne nous en parlez pas, bien que votre requête soit bien. En outre, il me semble que SQL Server ne spécifiera pas colonne 66 dans le message d'erreur. Le message d'erreur serait comme msg 102 niveau 15 état 1 ligne 6


L'image que vous venez de partager est pour index ES pas déclencheur s. Et puisque vous affirmez qu'il y a des déclencheurs sur la table, l'erreur vient à coup sûr ou l'outil que vous utilisez.


3 Réponses :


0
votes

Utilisez des crochets à la place:

UPDATE dbo.OBJECT 
SET LANGNAME = 'FooBar' 
WHERE dbo.OBJECT.["OBJEC_ID"] IN (69, 42, 1337)


3 commentaires

Merci pour les informations sur cela, vous pouvez le faire, mais cela ne résout pas le problème. Objec_id n'est pas un mot réservé, mais il est toujours erreurs à ce moment-là. Je l'ai testé avec des crochets mais cela ne change pas le résultat.


Il y a autre chose qui cause l'erreur? Voir le sqlfiddle. Où dirigez-vous la commande?


Le problème était en réalité l'outil que j'ai utilisé pour tester ne fonctionnant pas correctement. Je n'ai plus d'erreurs d'analyse avec cette méthode. Désolé pour la confusion et merci!



0
votes

Essayez comme ci-dessous

 UPDATE a
    SET LANGNAME = 'FooBar' 
    from dbo.OBJECT a  WHERE a."OBJEC_ID" IN (69, 42, 1337)


0 commentaires

0
votes

Essayez la solution ci-dessous. Utilisez des crochets au lieu de citations telles que dbo.object. [objec_id] code> au lieu de dbo.Object. "objec_id" code>.

UPDATE dbo.OBJECT SET LANGNAME = 'FooBar' WHERE dbo.OBJECT.[OBJEC_ID] IN (69, 42, 1337)


0 commentaires