Saya ingin menanyakan nama semua kolom tabel. Saya menemukan cara melakukan ini di:
Tapi saya perlu tahu: bagaimana ini bisa dilakukan di Microsoft SQL Server (2008 dalam kasus saya)?
SELECT TOP 0 * FROM my_table
kurang menekan tombol
Saya ingin menanyakan nama semua kolom tabel. Saya menemukan cara melakukan ini di:
Tapi saya perlu tahu: bagaimana ini bisa dilakukan di Microsoft SQL Server (2008 dalam kasus saya)?
SELECT TOP 0 * FROM my_table
kurang menekan tombol
Jawaban:
Anda dapat memperoleh informasi ini dan banyak lagi, lebih banyak lagi dengan menanyakan tampilan Skema Informasi .
Kueri sampel ini:
SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = N'Customers'
Dapat dibuat di atas semua objek DB ini:
Nortwind.
...)
SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = N'tableName';
ini bekerja untuk saya
TABLE_SCHEMA = '?' AND TABLE_NAME = '?'
karena saya di localhost dan saya punya beberapa tabel dengan nama yang sama tetapi dalam database yang berbeda.
Anda dapat menggunakan prosedur tersimpan sp_columns yang akan mengembalikan informasi yang berkaitan dengan semua kolom untuk tabel yang diberikan. Info lebih lanjut dapat ditemukan di sini http://msdn.microsoft.com/en-us/library/ms176077.aspx
Anda juga dapat melakukannya dengan kueri SQL. Beberapa hal seperti ini akan membantu:
SELECT * FROM sys.columns WHERE object_id = OBJECT_ID('dbo.yourTableName')
Atau variasi akan menjadi:
SELECT o.Name, c.Name
FROM sys.columns c
JOIN sys.objects o ON o.object_id = c.object_id
WHERE o.type = 'U'
ORDER BY o.Name, c.Name
Ini mendapatkan semua kolom dari semua tabel, diurutkan berdasarkan nama tabel dan kemudian pada nama kolom.
select *
from INFORMATION_SCHEMA.COLUMNS
where TABLE_NAME='tableName'
Ini lebih baik daripada mendapatkan dari sys.columns
karena itu menunjukkan DATA_TYPE
secara langsung.
AND TABLE_SCHEMA = 'schemaName'
dalam WHERE
klausa.
JOIN sys.types t on c.system_type_id = t.system_type_id
dan menambahkan t.name
pernyataan 'SELECT' untuk mendapatkan jenis di sebelah setiap nama kolom juga.
Anda bisa menggunakan sp_help
SQL Server 2008.
sp_help <table_name>;
Pintasan keyboard untuk perintah di atas: pilih nama tabel (mis. Sorot) dan tekan ALT+ F1.
Anda dapat menulis kueri ini untuk mendapatkan nama kolom dan semua detail tanpa menggunakan INFORMATION_SCHEMA di MySql:
SHOW COLUMNS FROM database_Name.table_name;
--This is another variation used to document a large database for conversion (Edited to --remove static columns)
SELECT o.Name as Table_Name
, c.Name as Field_Name
, t.Name as Data_Type
, t.length as Length_Size
, t.prec as Precision_
FROM syscolumns c
INNER JOIN sysobjects o ON o.id = c.id
LEFT JOIN systypes t on t.xtype = c.xtype
WHERE o.type = 'U'
ORDER BY o.Name, c.Name
--In the left join, c.type is replaced by c.xtype to get varchar types
SELECT column_name, data_type, character_maximum_length, table_name,ordinal_position, is_nullable
FROM information_schema.COLUMNS WHERE table_name LIKE 'YOUR_TABLE_NAME'
ORDER BY ordinal_position
Jalankan saja perintah ini
EXEC sp_columns 'Your Table Name'
Pertanyaan SO ini tidak memiliki pendekatan berikut:
-- List down all columns of table 'Logging'
select * from sys.all_columns where object_id = OBJECT_ID('Logging')
Ini akan memeriksa apakah yang diberikan table
adalah Base Table .
SELECT
T.TABLE_NAME AS 'TABLE NAME',
C.COLUMN_NAME AS 'COLUMN NAME'
FROM INFORMATION_SCHEMA.TABLES T
INNER JOIN INFORMATION_SCHEMA.COLUMNS C ON T.TABLE_NAME=C.TABLE_NAME
WHERE T.TABLE_TYPE='BASE TABLE'
AND T.TABLE_NAME LIKE 'Your Table Name'
Anda dapat mencoba ini. Ini memberikan semua nama kolom dengan tipe data masing-masing.
desc <TABLE NAME> ;
Anda dapat menggunakan kueri ini
SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME like N'%[ColumnName]%' and TABLE_NAME = N'[TableName]'
SELECT c.Name
FROM sys.columns c
JOIN sys.objects o ON o.object_id = c.object_id
WHERE o.object_id = OBJECT_ID('TABLE_NAME')
ORDER BY c.Name
Satu opsi lain yang bisa dibilang lebih intuitif adalah:
SELECT [name]
FROM sys.columns
WHERE object_id = OBJECT_ID('[yourSchemaType].[yourTableName]')
Ini memberi Anda semua nama kolom Anda dalam satu kolom. Jika Anda peduli dengan metadata lain, Anda dapat mengubah sunting PERNYATAAN SELECT menjadi SELECT *
.
Meringkas Jawaban
Saya dapat melihat berbagai jawaban dan cara untuk melakukan ini tetapi ada intinya dalam hal ini dan itu adalah objective
.
Ya, tujuannya. Jika Anda ingin only know
nama kolom yang dapat Anda gunakan
SELECT * FROM my_table WHERE 1=0
or
SELECT TOP 0 * FROM my_table
Tetapi jika Anda ingin use
kolom tersebut di suatu tempat atau hanya mengatakannya manipulate
maka pertanyaan cepat di atas tidak akan berguna. Anda harus menggunakan
SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = N'Customers'
satu lagi cara untuk mengetahui beberapa kolom tertentu di mana kita membutuhkan beberapa kolom serupa
SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME like N'%[ColumnName]%' and TABLE_NAME = N'[TableName]'
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'name_of_your_table'
SELECT * FROM my_table WHERE 1=0