2010-06-23 9 views
-1

Je reçois ces erreurs lors de l'exécution de l'instruction SQL suivante s'il vous plaît me aiderTitre: erreur CTE

;WITH myCTE AS 
(Select mcisi.* from 
coke_packaged_item AS spi 
JOIN coke_item AS si 
    ON si.coke_id = spi.coke_id 
    AND si.coke_item_id = spi.coke_item_id 
    AND si.shipper_flag = 'n' 
JOIN merch_cat_import_coke_item AS mcisi 
    ON mcisi.coke_id = si.coke_id 
    AND mcisi.resolved_coke_item_id = si.coke_item_id 
    AND mcisi.cat_import_event_id = @cat_import_event_id 
    AND mcisi.accept_flag = 'y') 


UPDATE coke_packaged_item 
SET packaged_in_uom_id = (select resolved_packaged_unit_of_measure_id from myCTE where myCTE.coke_id = coke_id) 
    priced_in_uom_id = COALESCE((select resolved_weight_unit_of_measure_idfrom myCTE.coke_id = coke_id), @each_uom_id), 
    name = (select packaged_item_name from myCTE where myCTE.coke_id = coke_id), 
    package_weight = (select package_weight from myCTE where myCTE.coke_id = coke_id) , 
    status_code = (select status_code from myCTE where myCTE.coke_id = coke_id) , 
    last_modified_user_id = (select CASE WHEN last_modified_user_id = 42 THEN @posting_user_id ELSE last_modified_user_id END from myCTE where myCTE.coke_id = coke_id), 
    last_modified_timestamp = CURRENT_TIMESTAMP 
and exists (select coke_id from coke_item AS si 
    where si.coke_id = spi.coke_id 
    AND si.coke_item_id = spi.coke_item_id 
    AND si.shipper_flag = 'n') 
and exists (select coke_id from merch_cat_import_coke_item AS mcisi) 
    where mcisi.coke_id = si.coke_id 
    AND mcisi.resolved_coke_item_id = si.coke_item_id 
    AND mcisi.cat_import_event_id = @cat_import_event_id 
    AND mcisi.accept_flag = 'y' 

Le message d'erreur est:

Msg 102, Level 15, State 1, Procedure Sp_Name, Line 44 
Incorrect syntax near 'priced_in_uom_id'. 
Msg 102, Level 15, State 1, Procedure Sp_Name, Line 44 
Incorrect syntax near '.'. 
Msg 102, Level 15, State 1, Procedure Sp_Name, Line 45 
Incorrect syntax near ','. 
Msg 102, Level 15, State 1, Procedure Sp_Name, Line 46 
Incorrect syntax near ','. 
Msg 102, Level 15, State 1, Procedure Sp_Name, Line 47 
Incorrect syntax near ','. 
Msg 102, Level 15, State 1, Procedure Sp_Name, Line 48 
Incorrect syntax near ','. 
Msg 156, Level 15, State 1, Procedure Sp_Name, Line 54 
Incorrect syntax near the keyword 'and'. 
Msg 156, Level 15, State 1, Procedure Sp_Name, Line 55 
Incorrect syntax near the keyword 'where'. 
+0

Avez-vous trouvé la réponse que vous recherchiez? Si oui, pourriez-vous l'accepter s'il vous plaît? Si non, pourriez-vous préciser ce que vous cherchez toujours? – MaasSql

Répondre

0

On dirait qu'il manque une virgule à la fin de la première ligne SET

SET packaged_in_uom_id = (select resolved_packaged_unit_of_measure_id from myCTE where myCTE.coke_id = coke_id), 
0

Vous manque une virgule à la ligne 44 après myCTE.coke_id = coke_id)

0

Vous manque une virgule ici

SET packaged_in_uom_id = (select resolved_packaged_unit_of_measure_id from myCTE where myCTE.coke_id = coke_id) , 

également sur la ligne suivante vous vers le bas manque un espace avant le from et un where

select resolved_weight_unit_of_measure_idfrom myCTE.coke_id = coke_id 

il pourrait y avoir d'autres erreurs que je » ll vous laisse pour les trouver

@SmartestVEGA Vous avez posté beaucoup de ces questions aujourd'hui. Je suggère d'obtenir une copie de SQL2008 Management Studio avec sa vérification de la syntaxe. J'ai collé votre requête et j'ai pu voir le problème très rapidement.

2

Mon ami, j'ai regardé @ votre code, et jusqu'à présent, tout ce que j'ai vraiment trouvé sont des erreurs de frappe.

Par exemple, * dans la clause set, il n'y a pas de virgule entre le jeu pour packaged_in_uom_id et priced_in_uom_id * dans la sous-requête pour priced_in_uom_id, il n'y a pas d'espace en face de la clause de.

Mon conseil est d'adopter un motif stylisé pour la façon dont vous écrivez sql. Le modèle que je l'utilise dit que * chaque article va sur sa propre ligne - sélectionner, d'où, commande par groupe par * chaque colonne continue sa propre ligne * virgules liste aller avant que l'article

quand j'ai commencé pour formater votre code en utilisant ces modèles, j'ai commencé à voir les problèmes.

Je applique ces modèles à l'aide du SQL Refactor de RedGate. C'est le meilleur formateur de code SQL que j'ai trouvé.

+0

+1 Mes sentiments exactement. –