Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Pilih kolom yang tidak kosong menggunakan SQL Server

Saya tidak tahu apakah ini lebih cepat, tetapi Anda dapat menggunakan satu trik:FOR XML AUTO akan menghilangkan kolom tanpa konten:

DECLARE @tbl TABLE(col1 INT,col2 INT,col3 INT);
INSERT INTO @tbl VALUES (1,2,NULL),(1,NULL,NULL),(NULL,NULL,NULL);

SELECT * 
FROM @tbl AS tbl
FOR XML AUTO

Ini hasilnya:col3 hilang...

<tbl col1="1" col2="2" />
<tbl col1="1" />
<tbl />

Mengetahui hal ini, Anda dapat menemukan daftar kolom, yang tidak NULL di semua baris, seperti ini:

DECLARE @ColList VARCHAR(MAX)=
STUFF
(
    (
    SELECT DISTINCT ',' + Attr.value('local-name(.)','nvarchar(max)')
    FROM
    (
        SELECT
        (
            SELECT *
            FROM @tbl AS tbl
            FOR XML AUTO,TYPE
        ) AS TheXML
    ) AS t
    CROSS APPLY t.TheXML.nodes('/tbl/@*') AS A(Attr) 
    FOR XML PATH('')
    ),1,1,''
);

SELECT @ColList

Isi @ColList sekarang col1,col2 . String ini dapat Anda tempatkan dalam SELECT yang dibuat secara dinamis .

PERBARUI:Petunjuk

Akan sangat pintar, untuk mengganti SELECT * dengan daftar kolom yang dibuat dari INFORMATION_SCHEMA.COLUMNS mengecualikan semua tidak-nullable . Dan - jika diperlukan dan memungkinkan - jenis, yang berisi data sangat besar (BLOB).

UPDATE2:Performa

Tidak tahu apa data Anda yang sangat besar berarti sebenarnya... Baru saja mencoba ini di atas meja dengan sekitar 500.000 baris (dengan SELECT * ) dan itu kembali dengan benar setelah kurang dari satu menit. Semoga, ini cukup cepat...



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana seseorang dapat mengulangi hasil prosedur tersimpan dari dalam prosedur tersimpan lain .... tanpa kursor?

  2. Apa itu Kolom Terhitung di SQL Server?

  3. Cara Memilih catatan yang tidak ada di Sql Server

  4. T-SQL untuk menemukan Nama Server Jarak Jauh dari server yang ditautkan

  5. Cara Menggunakan GOTO di SQL Server