Câu trả lời:
Không chắc chắn nếu có một cách dễ dàng hơn trong phiên bản 2008.
USE [Database Name]
SELECT COLUMN_NAME,*
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'YourTableName' AND TABLE_SCHEMA='YourSchemaName'
Đây là cách dễ dàng nhất
exec sp_columns [tablename]
Một cái gì đó như thế này?
sp_columns @table_name=your table name
Một phương pháp là truy vấn 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
Objtype
cột dư thừa :)
Điều này có vẻ dễ dàng hơn một chút so với các đề xuất ở trên vì nó sử dụng hàm OBJECT_ID () để định vị id của bảng. Bất kỳ cột nào có id đó là một phần của bảng.
SELECT *
FROM syscolumns
WHERE id=OBJECT_ID('YOUR_TABLE')
Tôi thường sử dụng một truy vấn tương tự để xem nếu một cột tôi biết là một phần của phiên bản mới hơn. Đó là cùng một truy vấn với việc thêm {AND name = 'Your_COLUMN'} vào mệnh đề where.
IF EXISTS (
SELECT *
FROM syscolumns
WHERE id=OBJECT_ID('YOUR_TABLE')
AND name='YOUR_COLUMN'
)
BEGIN
PRINT 'Column found'
END
thử cái này
select * from <tablename> where 1=2
...............................................
WHERE 1=2
và nó vẫn sẽ trả về siêu dữ liệu cột. Nếu sử dụng giao diện lập trình như ODBC, thì thông tin cột này có thể truy cập dưới dạng danh sách / mảng từ đối tượng con trỏ trong chương trình, đây là thứ tôi đang tìm kiếm. Nó có thể không có ý nghĩa trong ngữ cảnh SQL thuần túy, nhưng là một cách tiếp cận cô đọng khi kết nối với cơ sở dữ liệu thông qua Python / Java / C / etc.
Sau đây có vẻ giống như truy vấn được đề xuất đầu tiên ở trên nhưng đôi khi bạn phải chỉ định cơ sở dữ liệu để làm cho nó hoạt động. Lưu ý rằng truy vấn cũng sẽ hoạt động mà không chỉ định TABLE_SCHema:
SELECT COLUMN_NAME
FROM YOUR_DB_NAME.INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'YOUR_TABLE_NAME' AND TABLE_SCHEMA = 'YOUR_DB_NAME'
Tại sao không thử điều này:
nhấp chuột phải vào bảng -> Bảng Script Như -> Tạo thành -> Cửa sổ Trình soạn thảo truy vấn mới?
Toàn bộ danh sách các cột được đưa ra trong kịch bản. Sao chép nó và sử dụng các trường khi cần thiết.
"I want to return these as data"
, trong khi câu trả lời của bạn sẽ nhận được các giá trị, có khả năng OP muốn dữ liệu trong thời gian chạy.
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
Tôi không chắc giá trị syscolumns.colid có giống với giá trị 'ORDINAL_POSITION' được trả về như một phần của sp_column hay không, nhưng trong phần tiếp theo tôi đang sử dụng nó theo cách đó - hy vọng tôi không hiểu sai ...
Đây là một biến thể nhỏ của một số câu trả lời khác mà tôi đã tìm thấy - Tôi sử dụng câu này vì 'vị trí' hoặc thứ tự của cột trong bảng rất quan trọng trong ứng dụng của tôi - về cơ bản tôi cần biết 'Cột (n) được gọi là gì ? '
sp_columns trả về một loạt các công cụ không liên quan và tôi xử lý một lựa chọn hơn các hàm T-SQL, vì vậy tôi đã đi theo lộ trình này:
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
Mặc dù câu trả lời của @Gulzar Nazim là tuyệt vời, nhưng có thể dễ dàng hơn để bao gồm tên cơ sở dữ liệu trong truy vấn, có thể đạt được bằng SQL sau đây.
SELECT COLUMN_NAME, *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'you-table-name' AND TABLE_CATALOG='your-database-name'
Bạn có thể sử dụng mã dưới đây để in tất cả các tên cột; Bạn cũng có thể sửa đổi mã để in các chi tiết khác theo bất kỳ định dạng nào bạn thích
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
Đầu ra
column1
column2
column3
column4
Để sử dụng cùng một mã để in bảng và tên cột của nó là lớp C #, hãy sử dụng mã dưới đây:
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
Đầu ra:
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"; } }
}
Tôi chỉ sử dụng một truy vấn như Martin Smith đã đề cập, chỉ ngắn hơn một chút:
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'YourTableName'
SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = N'TableName'
Vì SysColumn không được dùng nữa , hãy sử dụng 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.Types
sẽ mang lại user_type_id = ID
loại. Điều này là duy nhất trong cơ sở dữ liệu. Đối với các loại dữ liệu hệ thống : 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;
NẾU bạn đang làm việc với postgresql, có khả năng nhiều hơn một lược đồ có thể có bảng có cùng tên trong trường hợp đó áp dụng truy vấn bên dưới
SELECT column_name, data_type
FROM information_schema.columns
WHERE table_name = 'your_table_name' AND table_schema = 'your_schema_name’;