Jawaban:
Tidak yakin apakah ada cara yang lebih mudah di versi 2008.
USE [Database Name]
SELECT COLUMN_NAME,*
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'YourTableName' AND TABLE_SCHEMA='YourSchemaName'
Ini cara termudah
exec sp_columns [tablename]
Sesuatu seperti ini?
sp_columns @table_name=your table name
Salah satu metode adalah dengan menanyakan syscolumns:
select
syscolumns.name as [Column],
syscolumns.xusertype as [Type],
sysobjects.xtype as [Objtype]
from
sysobjects
inner join
syscolumns on sysobjects.id = syscolumns.id
where sysobjects.xtype = 'u'
and sysobjects.name = 'MyTableName'
order by syscolumns.name
Objtypekolom yang redundan :)
Ini tampaknya sedikit lebih mudah daripada saran di atas karena menggunakan fungsi OBJECT_ID () untuk menemukan id tabel. Setiap kolom dengan id itu adalah bagian dari tabel.
SELECT *
FROM syscolumns
WHERE id=OBJECT_ID('YOUR_TABLE')
Saya biasanya menggunakan kueri yang sama untuk melihat apakah kolom yang saya tahu adalah bagian dari versi yang lebih baru. Ini adalah permintaan yang sama dengan penambahan {AND name = 'YOUR_COLUMN'} ke klausa where.
IF EXISTS (
SELECT *
FROM syscolumns
WHERE id=OBJECT_ID('YOUR_TABLE')
AND name='YOUR_COLUMN'
)
BEGIN
PRINT 'Column found'
END
coba ini
select * from <tablename> where 1=2
...............................................
WHERE 1=2dan itu masih akan mengembalikan meta-data kolom. Jika menggunakan antarmuka terprogram seperti ODBC, maka info kolom ini dapat diakses sebagai daftar / larik dari objek kursor dalam program, yang adalah apa yang saya cari. Mungkin tidak masuk akal dalam konteks SQL murni, tetapi merupakan pendekatan ringkas saat menghubungkan ke database melalui Python / Java / C / dll.
Berikut ini tampaknya seperti kueri yang disarankan pertama di atas tetapi kadang-kadang Anda harus menentukan database untuk membuatnya berfungsi. Perhatikan bahwa kueri juga harus berfungsi tanpa menentukan TABLE_SCHEMA:
SELECT COLUMN_NAME
FROM YOUR_DB_NAME.INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'YOUR_TABLE_NAME' AND TABLE_SCHEMA = 'YOUR_DB_NAME'
Mengapa tidak coba saja ini:
klik kanan pada tabel -> Script Table As -> Create To -> New Query Editor Window?
Seluruh daftar kolom diberikan dalam skrip. Salin dan gunakan bidang yang diperlukan.
"I want to return these as data", sementara jawaban Anda akan mendapatkan nilai, kemungkinan OP menginginkan data saat runtime.
USE[Database]
SELECT TABLE_NAME,TABLE_SCHEMA,[Column_Name],[Data_type]
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA='dbo'
CREATE PROCEDURE [dbo].[Usp_GetColumnName]
@TableName varchar(50)
AS
BEGIN
BEGIN
SET NOCOUNT ON
IF (@TableName IS NOT NULL)
select ORDINAL_POSITION OrderPosition,COLUMN_NAME ColumnName from information_schema.columns
where table_name =@TableName
order by ORDINAL_POSITION
END
END
Saya tidak yakin apakah nilai syscolumns.colid sama dengan nilai 'ORDINAL_POSITION' yang dikembalikan sebagai bagian dari sp_columns, tetapi dalam hal berikut saya menggunakannya dengan cara itu - harap saya tidak salah informasi ...
Berikut sedikit variasi pada beberapa jawaban lain yang saya temukan - saya menggunakan ini karena 'posisi' atau urutan kolom dalam tabel penting dalam aplikasi saya - pada dasarnya saya perlu tahu 'Apa itu kolom (n) disebut ? '
sp_columns mengembalikan sejumlah besar hal-hal asing, dan saya lebih mudah dengan fungsi pilih daripada T-SQL, jadi saya memilih rute ini:
select
syscolumns.name,
syscolumns.colid
from
sysobjects, syscolumns
where
sysobjects.id = syscolumns.id and
sysobjects.xtype = 'u' and
sysobjects.name = '<YOUR_TABLE>'
order by syscolumns.colid
Sementara jawaban @Gulzar Nazim bagus, mungkin lebih mudah untuk memasukkan nama basis data ke dalam kueri, yang bisa dicapai dengan SQL berikut.
SELECT COLUMN_NAME, *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'you-table-name' AND TABLE_CATALOG='your-database-name'
Anda dapat menggunakan kode di bawah ini untuk mencetak semua nama kolom; Anda juga dapat memodifikasi kode untuk mencetak detail lain dalam format apa pun yang Anda suka
declare @Result varchar(max)='
'
select @Result=@Result+''+ColumnName+'
'
from
(
select
replace(col.name, ' ', '_') ColumnName,
column_id ColumnId
from sys.columns col
join sys.types typ on
col.system_type_id = typ.system_type_id AND col.user_type_id = typ.user_type_id
where object_id = object_id('tblPracticeTestSections')
) t
order by ColumnId
print @Result
Keluaran
column1
column2
column3
column4
Untuk menggunakan kode yang sama untuk mencetak tabel dan nama kolomnya sebagai kelas C # gunakan kode di bawah ini:
declare @TableName sysname = '<EnterTableName>'
declare @Result varchar(max) = 'public class ' + @TableName + '
{'
select @Result = @Result + '
public static string ' + ColumnName + ' { get { return "'+ColumnName+'"; } }
'
from
(
select
replace(col.name, ' ', '_') ColumnName,
column_id ColumnId
from sys.columns col
join sys.types typ on
col.system_type_id = typ.system_type_id AND col.user_type_id = typ.user_type_id
where object_id = object_id(@TableName)
) t
order by ColumnId
set @Result = @Result + '
}'
print @Result
Keluaran:
public class tblPracticeTestSections
{
public static string column1 { get { return "column1"; } }
public static string column2{ get { return "column2"; } }
public static string column3{ get { return "column3"; } }
public static string column4{ get { return "column4"; } }
}
Saya hanya menggunakan kueri seperti yang disebutkan Martin Smith, hanya sedikit lebih pendek:
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'YourTableName'
SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = N'TableName'
Karena SysColumns sudah tidak digunakan lagi , gunakan Sys.All_Columns:
Select
ObjectName = Object_Name(Object_ID)
,T.Name
,C.*
,T.*
From
Sys.All_Columns C
Inner Join Sys.Types T On T.User_Type_Id = C.User_Type_Id
Where [Object_ID] = Object_ID('Sys.Server_Permissions')
--Order By Name Asc
Select * From Sys.Typesakan menghasilkan user_type_id = IDjenis. Ini unik di dalam basis data. Untuk jenis data sistem: user_type_id = system_type_id.
DECLARE @col NVARCHAR(MAX);
SELECT @col= COALESCE(@col, '') + ',' + COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS WHERE Table_name = 'MxLocations';
SELECT @col;
JIKA Anda bekerja dengan postgresql, ada kemungkinan lebih dari satu skema memiliki tabel dengan nama yang sama dalam hal ini berlaku permintaan di bawah ini
SELECT column_name, data_type
FROM information_schema.columns
WHERE table_name = 'your_table_name' AND table_schema = 'your_schema_name’;