Kolom nullable dalam database terkadang dapat menyebabkan masalah kinerja. Itu jelas bukan untuk mengatakan bahwa kolom yang dapat dibatalkan akan selalu menyebabkan masalah kinerja, tetapi jika Anda memang memiliki masalah kinerja, mengidentifikasi kolom yang dapat dibatalkan berpotensi memberikan beberapa petunjuk tentang di mana letak masalahnya. Terkadang membuat kolom NOT NULL
dapat membantu meningkatkan kinerja.
Maksud saya "kolom nullable", kolom yang memungkinkan NULL. Jika definisi kolom tidak menyertakan NOT NULL
, maka itu memungkinkan untuk nilai NULL dan "nullable".
Di bawah ini adalah kode yang memungkinkan Anda untuk membuat daftar semua kolom nullable dalam database di SQL Server.
Contoh 1 – INFORMATION_SCHEMA.COLUMNS
Tampilan skema informasi ini mencantumkan semua kolom yang dapat diakses oleh pengguna saat ini di database saat ini. Ini memiliki kolom bernama IS_NULLABLE
. Jika kolom yang relevan memungkinkan untuk NULL, kolom ini mengembalikan
YA
. Jika tidak,
TIDAK
dikembalikan.
SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE IS_NULLABLE = 'YES';
Ini mencantumkan semua kolom dari tampilan.
Contoh 2 – INFORMATION_SCHEMA.COLUMNS dengan Lebih Sedikit Kolom yang Ditentukan
Anda mungkin tidak ingin semua kolom dikembalikan dari tampilan. Berikut ini contoh dengan lebih sedikit kolom yang dikembalikan.
SELECT TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME, COLUMN_DEFAULT, DATA_TYPE FROM INFORMATION_SCHEMA.COLUMNS WHERE IS_NULLABLE = 'YES' ORDER BY TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME;
Contoh 3 – Menggunakan sys.columns
Jika Anda tidak ingin menggunakan INFORMATION_SCHEMA.COLUMNS
tampilan, maka Anda dapat menanyakan sys.columns
lihat saja.
Namun, Anda harus melakukan beberapa penggabungan jika ingin mengembalikan tabel dan/atau skema, dll.
Contoh:
SELECT SCHEMA_NAME(t.schema_id) AS [Schema], t.name AS [Table], c.name AS [Column], dc.definition AS [Column Default], ty.name AS [Data Type] FROM sys.tables AS t INNER JOIN sys.columns AS c ON t.object_id = c.object_id LEFT JOIN sys.types AS ty ON c.user_type_id = ty.user_type_id LEFT JOIN sys.default_constraints dc ON c.default_object_id = dc.object_id WHERE c.is_nullable = 1 ORDER BY [Schema], [Table], [Column];