Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

XPath do pobrania wartości XML SQL

Aktualizacja

Moim zaleceniem byłoby rozdrobnienie XML-a na relacje i wykonanie przeszukiwania i złączeń w wynikowej relacji, w sposób zorientowany na zbiór, a nie w sposób proceduralny polegający na przeszukiwaniu określonych węzłów w XML. Oto proste zapytanie XML, które usuwa interesujące węzły i atrybuty:

select x.value(N'../../../../@stepId', N'int') as StepID
  , x.value(N'../../@id', N'int') as ComponentID
  , x.value(N'@nom',N'nvarchar(100)') as Nom
  , x.value(N'@valeur', N'nvarchar(100)') as Valeur
from @x.nodes(N'/xml/box/components/component/variables/variable') t(x)

Jeśli jednak musisz użyć ścieżki XPath, która pobiera dokładnie interesującą Cię wartość:

select x.value(N'@valeur', N'nvarchar(100)') as Valeur
from @x.nodes(N'/xml/box[@stepId=sql:variable("@stepID")]/
    components/component[@id = sql:variable("@componentID")]/
       variables/variable[@nom="Enabled"]') t(x)

Jeśli stepID i komponent ID są kolumnami, a nie zmiennymi, należy użyć funkcji sql:column() zamiast sql:variable w filtrach XPath. Zobacz Wiązanie danych relacyjnych w danych XML .

I na koniec, jeśli wszystko, czego potrzebujesz, to sprawdzić istnienie, możesz użyć istnieje( ) Metoda XML:

select @x.exist(
  N'/xml/box[@stepId=sql:variable("@stepID")]/
    components/component[@id = sql:variable("@componentID")]/
      variables/variable[@nom="Enabled" and @valeur="Yes"]') 


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Najskuteczniejszy sposób w SQL Server na pobieranie danych z daty i godziny?

  2. Serwer SQL, konwersja sekund na minuty, godziny, dni

  3. Kompresuj określoną partycję w tabeli w SQL Server (T-SQL)

  4. Używanie dynamicznie nazwanej tabeli w zadaniu przepływu danych SSIS

  5. Aplikacja internetowa asp.net mvc 3 nie działa po wdrożeniu