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