Rumah >pangkalan data >tutorial mysql >Bagaimanakah boleh menguasai..spt_values ​​Membahagikan Nilai Dipisahkan Koma dengan Cekap dalam Pelayan SQL?

Bagaimanakah boleh menguasai..spt_values ​​Membahagikan Nilai Dipisahkan Koma dengan Cekap dalam Pelayan SQL?

Susan Sarandon
Susan Sarandonasal
2024-12-30 14:20:11619semak imbas

How Can master..spt_values Efficiently Split Comma-Separated Values in SQL Server?

Memisahkan Lajur dengan master..spt_values

Latar Belakang: Carian Jadual dan Unjuran

Master..spt_values ​​ialah jadual sistem dalam Microsoft SQL Server yang mengandungi pelbagai jadual carian dan unjuran yang digunakan oleh prosedur tersimpan sistem. Ia membolehkan manipulasi data yang cekap dengan menyediakan urutan nombor yang telah ditetapkan, bitmasks dan nilai lain yang lazim diperlukan.

Jadual carian membenarkan untuk mengembangkan nilai berangka kepada perwakilan rentetan yang sepadan, seperti menukar jenis kunci daripada nombor kepada nama . Sebaliknya, jadual unjuran menyediakan cara untuk lelaran melalui julat nilai, yang berguna untuk memisahkan lajur kepada berbilang baris.

Jenis = "P": Jadual Unjuran

Taip "P" dalam master..spt_values ​​menandakan jadual unjuran. Ia mengandungi jujukan nombor berturut-turut daripada 0 hingga 2047. Jadual ini membolehkan unjuran yang cekap bagi satu set nilai melalui pelbagai operasi, seperti pengiraan atau pengagregatan.

Faedah Menggunakan Jenis "P" untuk Pemisahan Lajur

faedah menggunakan master..spt_values ​​(Jenis "P") untuk membelah lajur CSV terletak pada prestasi dan kecekapannya. Dengan memanfaatkan jujukan nombor yang telah dikira sebelumnya, SQL Server boleh mengelak daripada mencipta dan memasukkan ke dalam jadual sementara, yang diperlukan jika jujukan itu dijana secara dinamik. Ini boleh meningkatkan dengan ketara kelajuan pelaksanaan pertanyaan yang melaksanakan operasi pemisahan lajur.

Contoh Kod

Kod yang dipersoalkan menunjukkan cara membahagi lajur CSV kepada berbilang baris menggunakan master..spt_values:

SELECT
    T.col1, RIGHT(LEFT(T.col4,Number-1),
    CHARINDEX(',',REVERSE(LEFT(','+T.col4,Number-1))))
FROM
    master..spt_values,
    table1 T
WHERE
    Type = 'P' AND Number BETWEEN 1 AND LEN(T.col4)+1 AND
    (SUBSTRING(T.col4,Number,1) = ','
    -- OR SUBSTRING(T.col4,Number,1)  = '') --this does not work correctly anyway

Kod ini memanfaatkan jadual Jenis "P" dalam master..spt_values ​​untuk mencipta jujukan daripada nombor yang menyokong setiap aksara dalam lajur CSV (col4). Ia kemudian menggunakan nombor ini untuk membahagikan lajur kepada baris berdasarkan pembatas koma.

Atas ialah kandungan terperinci Bagaimanakah boleh menguasai..spt_values ​​Membahagikan Nilai Dipisahkan Koma dengan Cekap dalam Pelayan SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn