Welcome to Sign in | Help

Parametrizarea unui nod in XML

  •  05-13-2009, 5:31 PM

    Parametrizarea unui nod in XML

    Salutare la toti,

    Am si eu o problema in SQL-ul urmator:

    declare @NODCautat as nvarchar(100)

    SET @NODCautat = 'Facturi'

    select (SELECT

    T.node.query('.')

    FROM Continut.nodes('//' + @NODCautat + '' ) as T(node) for XML auto, root ) as TXML

    FROM [LOG]

    WHERE

    (SELECT

    T.node.query('.')

    FROM Continut.nodes('//' + @NODCautat + '' ) as T(node) for XML auto, root ) IS NOT NULL

    Eroarea care o primesc este "The argument 1 of the XML data type method "nodes" must be a string literal."

    Am facut sapaturi si am ajuns la concluzia ca nu se poate parametra nodul cautat (@NODCautat ) in randul

    FROM Continut.nodes('//' + @NODCautat + '' ) as T(node) for XML auto, root ) IS NOT NULL

    In orice caz nu in forma asta, poate in alt mod, pe care nu il cunosc si poate ma ajutati voi. Ideea e ca tin mortis sa parametrez nodul, deoarece vreau sa il caut prin mai multe XML-uri (diferite ca structura) stocate in coloana unui tabel. Nodul il cunosc doar la momentul executiei.

    Am mai incercat o varianta cu un SQL dinamic, de genul:

    declare @SirSQL as nvarchar(max)

    declare @NOD as nvarchar(100)

    declare @Tabel as table(ColoanaXML xml)

    DECLARE @ParmDefinition nvarchar(500)

    set @NOD='FacturaDetalii'

    set @SirSQL=N'declare @Tabe as table(Col xml);

    insert into @Tabe

    SELECT (SELECT T.node.query(''.'')

    FROM Continut.nodes(''//'+ @NOD +''') as T(node) for XML auto, root )

    FROM [LOG] WHERE (SELECT

    T.node.query(''.'')

    FROM Continut.nodes(''//' + @NOD + ''') as T(node) for XML auto, root ) IS NOT NULL;'

    exec sp_executesql @SirSQL

    Insa nu stiu cum sa scot tabelul din parametrul @Tabe astfel incat sa-l pot folosi mai departe in interogari.

    Merci

     

     

     

View Complete Thread
Powered by Community Server (Commercial Edition), by Telligent Systems