Di SQL Server Anda dapat menggunakan sp_columns
prosedur tersimpan sistem untuk mengembalikan informasi kolom untuk objek tertentu yang dapat ditanyakan di lingkungan saat ini. Objek tersebut mencakup tabel, tampilan, atau objek lain yang memiliki kolom seperti fungsi bernilai tabel.
Anda bisa mendapatkan informasi untuk kolom tertentu, atau Anda bisa menentukan semua kolom dari tabel, tampilan, dll.
Sintaks
Sintaksnya seperti ini:
sp_columns [ @table_name = ] object [ , [ @table_owner = ] owner ] [ , [ @table_qualifier = ] qualifier ] [ , [ @column_name = ] column ] [ , [ @ODBCVer = ] ODBCVer ]
@table_name
argumen adalah satu-satunya argumen yang diperlukan. Ini adalah nama tabel/objek yang Anda inginkan informasi kolomnya.
Argumen lainnya adalah opsional. Untuk informasi selengkapnya tentang argumen ini, lihat dokumentasi Microsoft.
Prosedur tersimpan ini memerlukan SELECT
dan VIEW DEFINITION
izin pada skema.
Contoh 1 – Mengembalikan Informasi untuk Kolom Tertentu
Contoh ini menggunakan semua argumen yang mungkin. Ini mengembalikan informasi untuk kolom tertentu, dalam tabel tertentu, dari pemilik tabel tertentu, dalam database tertentu.
EXEC sp_columns @table_name = 'Cities', @table_owner = 'Application', @table_qualifier = 'WideWorldImporters', @column_name = 'Location', @ODBCVer = 2;
Hasil (menggunakan keluaran vertikal):
TABLE_QUALIFIER | WideWorldImporters TABLE_OWNER | Application TABLE_NAME | Cities COLUMN_NAME | Location DATA_TYPE | -4 TYPE_NAME | geography PRECISION | 2147483647 LENGTH | 2147483647 SCALE | NULL RADIX | NULL NULLABLE | 1 REMARKS | NULL COLUMN_DEF | NULL SQL_DATA_TYPE | -4 SQL_DATETIME_SUB | NULL CHAR_OCTET_LENGTH | 2147483647 ORDINAL_POSITION | 4 IS_NULLABLE | YES SS_DATA_TYPE | 23 (1 row affected)
Berikut cara yang lebih ringkas untuk melakukannya:
EXEC sp_columns 'Cities', 'Application', 'WideWorldImporters', 'Location', 2;
Itu mengembalikan hasil yang sama.
Contoh 2 – Tentukan Tabel Saja
Dalam contoh ini saya beralih ke database lain dan hanya menentukan nama tabel.
USE Music; EXEC sp_columns @table_name = 'Artists';
Hasil (menggunakan keluaran vertikal):
Changed database context to 'Music'. -[ RECORD 1 ]------------------------- TABLE_QUALIFIER | Music TABLE_OWNER | dbo TABLE_NAME | Artists COLUMN_NAME | ArtistId DATA_TYPE | 4 TYPE_NAME | int identity PRECISION | 10 LENGTH | 4 SCALE | 0 RADIX | 10 NULLABLE | 0 REMARKS | NULL COLUMN_DEF | NULL SQL_DATA_TYPE | 4 SQL_DATETIME_SUB | NULL CHAR_OCTET_LENGTH | NULL ORDINAL_POSITION | 1 IS_NULLABLE | NO SS_DATA_TYPE | 56 -[ RECORD 2 ]------------------------- TABLE_QUALIFIER | Music TABLE_OWNER | dbo TABLE_NAME | Artists COLUMN_NAME | ArtistName DATA_TYPE | -9 TYPE_NAME | nvarchar PRECISION | 255 LENGTH | 510 SCALE | NULL RADIX | NULL NULLABLE | 0 REMARKS | NULL COLUMN_DEF | NULL SQL_DATA_TYPE | -9 SQL_DATETIME_SUB | NULL CHAR_OCTET_LENGTH | 510 ORDINAL_POSITION | 2 IS_NULLABLE | NO SS_DATA_TYPE | 39 -[ RECORD 3 ]------------------------- TABLE_QUALIFIER | Music TABLE_OWNER | dbo TABLE_NAME | Artists COLUMN_NAME | ActiveFrom DATA_TYPE | -9 TYPE_NAME | date PRECISION | 10 LENGTH | 20 SCALE | NULL RADIX | NULL NULLABLE | 1 REMARKS | NULL COLUMN_DEF | NULL SQL_DATA_TYPE | -9 SQL_DATETIME_SUB | NULL CHAR_OCTET_LENGTH | NULL ORDINAL_POSITION | 3 IS_NULLABLE | YES SS_DATA_TYPE | 0 (3 rows affected)
Ini mengembalikan informasi untuk semua kolom dalam tabel yang ditentukan.
Anda harus berada di database yang benar sekalipun. Jika saya menjalankan kembali contoh sebelumnya pada database yang berbeda, saya tidak mendapatkan hasil.
USE WideWorldImporters; EXEC sp_columns @table_name = 'Artists';
Hasil:
Changed database context to 'WideWorldImporters'. (0 rows affected)
Contoh 3 – Tentang Tabel Qualifier
Jika Anda memberikan @table_qualifier
argumen, itu harus sama dengan database saat ini. Jika tidak, kesalahan akan ditampilkan.
USE Music; EXEC sp_columns @table_name = 'Artists', @table_qualifier = 'WideWorldImporters';
Hasil:
Msg 15250, Level 16, State 1, Line 24 The database name component of the object qualifier must be the name of the current database.
Dalam contoh ini saya beralih ke database "Musik", tetapi kemudian menggunakan kualifikasi tabel "WideWorldImporters", yang mengakibatkan kesalahan Msg 15250 dikembalikan.
Dalam hal ini, saya seharusnya menggunakan kualifikasi tabel "Musik". Atau, saya bisa menghilangkan argumen sama sekali.
Contoh 4 – Tampilan
Sintaksnya sama, apa pun jenis objeknya. Berikut ini contoh mendapatkan informasi kolom untuk tampilan:
EXEC sp_columns @table_name = 'Customers', @table_owner = 'Website', @column_name = 'CustomerID';
Hasil:
TABLE_QUALIFIER | WideWorldImporters TABLE_OWNER | Website TABLE_NAME | Customers COLUMN_NAME | CustomerID DATA_TYPE | 4 TYPE_NAME | int PRECISION | 10 LENGTH | 4 SCALE | 0 RADIX | 10 NULLABLE | 0 REMARKS | NULL COLUMN_DEF | NULL SQL_DATA_TYPE | 4 SQL_DATETIME_SUB | NULL CHAR_OCTET_LENGTH | NULL ORDINAL_POSITION | 1 IS_NULLABLE | NO SS_DATA_TYPE | 56
Itu adalah informasi kolom untuk tampilan.
Dalam hal ini, jika saya menghilangkan pemilik tabel dari kueri, dua baris akan dikembalikan:
EXEC sp_columns @table_name = 'Customers', @column_name = 'CustomerID';
Hasil:
-[ RECORD 1 ]------------------------- TABLE_QUALIFIER | WideWorldImporters TABLE_OWNER | Sales TABLE_NAME | Customers COLUMN_NAME | CustomerID DATA_TYPE | 4 TYPE_NAME | int PRECISION | 10 LENGTH | 4 SCALE | 0 RADIX | 10 NULLABLE | 0 REMARKS | NULL COLUMN_DEF | (NEXT VALUE FOR [Sequences].[CustomerID]) SQL_DATA_TYPE | 4 SQL_DATETIME_SUB | NULL CHAR_OCTET_LENGTH | NULL ORDINAL_POSITION | 1 IS_NULLABLE | NO SS_DATA_TYPE | 56 -[ RECORD 2 ]------------------------- TABLE_QUALIFIER | WideWorldImporters TABLE_OWNER | Website TABLE_NAME | Customers COLUMN_NAME | CustomerID DATA_TYPE | 4 TYPE_NAME | int PRECISION | 10 LENGTH | 4 SCALE | 0 RADIX | 10 NULLABLE | 0 REMARKS | NULL COLUMN_DEF | NULL SQL_DATA_TYPE | 4 SQL_DATETIME_SUB | NULL CHAR_OCTET_LENGTH | NULL ORDINAL_POSITION | 1 IS_NULLABLE | NO SS_DATA_TYPE | 56 (2 rows affected)
Dua baris dikembalikan karena ada dua objek yang disebut "Pelanggan". Salah satunya adalah pemandangan dan yang lainnya adalah meja. Pemilik tabel untuk tampilan disebut “Situs Web”, dan pemilik tabel untuk tabel disebut “Penjualan”.
Contoh 5 – Fungsi Bernilai Tabel
Seperti yang disebutkan, Anda juga bisa mendapatkan informasi kolom untuk fungsi bernilai tabel.
Berikut adalah contoh mendapatkan informasi kolom untuk fungsi bernilai tabel. Sekali lagi, sintaksnya sama.
EXEC sp_columns @table_name = 'DetermineCustomerAccess';
Hasil:
TABLE_QUALIFIER | WideWorldImporters TABLE_OWNER | Application TABLE_NAME | DetermineCustomerAccess COLUMN_NAME | AccessResult DATA_TYPE | 4 TYPE_NAME | int PRECISION | 10 LENGTH | 4 SCALE | 0 RADIX | 10 NULLABLE | 0 REMARKS | NULL COLUMN_DEF | NULL SQL_DATA_TYPE | 4 SQL_DATETIME_SUB | NULL CHAR_OCTET_LENGTH | NULL ORDINAL_POSITION | 1 IS_NULLABLE | NO SS_DATA_TYPE | 56