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

Wydajne zapytanie do podzielenia rozdzielanej kolumny na oddzielną tabelę

Utwórz funkcję podziału:

CREATE FUNCTION dbo.SplitStrings(@List NVARCHAR(MAX))
RETURNS TABLE
AS
   RETURN ( SELECT Item FROM
       ( SELECT Item = x.i.value('(./text())[1]', 'nvarchar(max)')
         FROM ( SELECT [XML] = CONVERT(XML, '<i>'
         + REPLACE(@List, '.', '</i><i>') + '</i>').query('.')
           ) AS a CROSS APPLY [XML].nodes('i') AS x(i) ) AS y
       WHERE Item IS NOT NULL
   );
GO

Następnie pozbądź się wszystkich bzdur związanych z kursorem i zapętleniem i zrób tak:

INSERT dbo.mrhierlookup
(
  heiraui,
  aui
)
SELECT s.Item, m.aui
  FROM dbo.mrhier3 AS m
  CROSS APPLY dbo.SplitStrings(m.ptr) AS s
GROUP BY s.Item, m.aui;



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dlaczego EF generuje zapytania SQL z niepotrzebnymi kontrolami wartości null?

  2. Zwróć wszystkie grupy plików dla bieżącej bazy danych w SQL Server

  3. Muszę przekazać nazwy kolumn za pomocą zmiennej w instrukcji select w procedurze sklepu, ale nie mogę użyć dynamicznego zapytania

  4. Jaki jest punkt początkowego katalogu w parametrach połączenia programu SQL Server?

  5. Zatrzaski SQL Server — inne zatrzaski, o których warto wiedzieć