2010-10-22 6 views
3

c'est ce que ma requête ressemble:XML de lecture qui est enregistré sous forme de texte à partir de SQL

select top 5 cast(content_html as xml) as [prodxml], 
prodxml.value('data(ClassTemplate[1]', 'nvarchar(max) ') as prod2 
from content 
where 
end_date >= getdate() 
and folder_id != 71682 

et je continue à recevoir:

Msg 4121, Level 16, State 1, Line 1 
Cannot find either column "prodxml" or the user-defined function or aggregate "prodxml.value", or the name is ambiguous. 

ce que je fais mal ??

Répondre

3

Je ne peux pas interroger prod1 directement, sinon comment puis-je trouver tous les enregistrements qui ont "Autre" comme modèle de classe?

Vous ne pouvez pas référencer un alias de colonne dans une autre colonne de la même instruction SELECT - Utilisation:

SELECT TOP 5 
     CAST(t.content_html AS XML).value('(/root/ClassTemplate)[1]', 'NVARCHAR(max)') AS prod2 
    FROM CONTENT t 
WHERE t.end_date >= getdate() 
    AND t.folder_id != 71682 

Si vous souhaitez filtrer en fonction de la valeur prod2 dans la clause WHERE - utilisation:

FROM CONTENT t 
WHERE CAST(t.content_html AS XML).value('(/root/ClassTemplate)[1]', 'NVARCHAR(max)') = 'Other' 
    AND t.end_date >= getdate() 
    AND t.folder_id != 71682 
+0

sélectionner top 5 coulée (content_html comme xml) .value ('données (ClassTemplate [1]', 'nvarchar (500))') en tant que prod1 de contenu où content_status = 'A' et content_type = 3333 et end_date> = getdate() et folder_id! = 71682 et je reçois maintenant: Le type de données 'nvarchar (500))' utilisé dans la méthode VALUE n'est pas valide. –

+0

@Tanya Xrum: Il ya une faute de frappe dans ce que vous avez posté - ''nvarchar (500))' devrait être 'nvarchar (500)' –

+0

merci, maintenant je reçois 5 nulls .. je devrais obtenir les valeurs du "ClassTemplate" nœud, non? –

Questions connexes