2009-03-01 38 views

Trả lời

310

Không chắc chắn liệu có cách nào dễ dàng hơn trong phiên bản 2008 không.

USE [Database Name] 
SELECT COLUMN_NAME,* 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_NAME = 'YourTableName' AND TABLE_SCHEMA='YourSchemaName' 
+5

'YourSchemaName' là gì? – Drewdin

+11

'YourSchemaName' là lược đồ cho bảng bạn đang truy vấn. Ví dụ: dbo.myTable, 'dbo' là lược đồ 'myTable' thuộc về. Các lược đồ giúp dễ dàng gán quyền cho một nhóm thay vì mỗi bảng riêng lẻ. Xem câu hỏi này: http://stackoverflow.com/questions/1062075/why-do-table-names-in-sql-server-start-with-dbo – jmosesman

+2

Đừng quên sử dụng lệnh USE DatabaseName nếu không bạn có thể tìm kiếm bằng master hoặc cơ sở dữ liệu khác với bạn muốn – Muflix

28

Một cái gì đó như thế này?

sp_columns @table_name=your table name 
11

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 
+1

Tôi thực sự thích điều này. Tôi tìm thấy 'Objtype' cột dư thừa, mặc dù :) – Joel

+1

Nó sẽ không được tốt hơn để viết hoàn toàn tham gia (sysobjects để bên trong tham gia syscolumns sc trên so.id = sc.id)? Điều này có vẻ như một câu trả lời lười biếng tại các chi phí của hiệu suất. Tôi có thể sai ... – Losbear

+1

@Losbear thay đổi nó PS: Không lười biếng, nó chỉ là mã từ 8 năm trước. :) Trong thời gian cũ (tôi đã sử dụng SQL Server bắt đầu từ phiên bản 4.2), tôi đã sử dụng để viết các truy vấn SQL theo cách này. không có vấn đề về hiệu suất. – splattne

1

Tôi không chắc chắn nếu giá trị syscolumns.colid cũng giống như giá trị 'ORDINAL_POSITION' trở lại như một phần của sp_columns, nhưng trong những gì sau 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ỏ trên một số câu trả lời khác tôi đã tìm thấy - tôi sử dụng điều này vì 'vị trí' hoặc thứ tự của cột trong bảng quan trọng trong ứng dụng của tôi - về cơ bản tôi cần biết 'Cột là gì (n) gọi là?'

sp_columns trả về một bó toàn bộ những thứ không liên quan, và tôi là handier với một lựa chọn hơn chức năng T-SQL, vì vậy tôi đã đi tuyến đường 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 
+0

Tôi đã sử dụng phương pháp này trong một thời gian dài, nhưng đã được khuyên chống lại nó. Trong thực tế tôi nhấn chính xác vấn đề tôi đã nói với tôi có thể ... nó có nhiều khả năng là phiên bản mới của MSSQL sẽ thay đổi cú pháp. Ví dụ, nó từng là sys.object và sys.columns trong các phiên bản đầu tiên tôi sử dụng kỹ thuật này. Giả sử giản đồ và phương pháp thủ tục lưu trữ có nhiều bằng chứng chống lại điều này ... không chắc chắn, nhưng cho đến nay rất tốt. – RosieC

1
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 [email protected] 
      order by ORDINAL_POSITION 
    END 
END 
+2

Chào mừng bạn đến với SO!Nhưng có vẻ như câu hỏi này đã có một câu trả lời thỏa đáng khoảng ba năm trước ... Ngoài ra, khi đăng mã, hãy sử dụng {} để làm nổi bật nó. Có một cái nhìn tại các câu hỏi thường gặp, nó có một số thông tin tốt về bắt đầu ở đây: http://stackoverflow.com/faq –

84

Đây là cách đơn giản nhất

exec sp_columns [tablename] 
+0

Điều này là ngắn gọn và đơn giản, nên là câu trả lời đúng. Tôi tưởng tượng nó không tồn tại khi câu hỏi ban đầu được hỏi :) – DanteTheSmith

2

Tại sao không chỉ cần cố gắng này:

nhấp chuột phải vào tab le -> Script Table As -> Create To -> Trình soạn thảo truy vấn mới Cửa sổ?

Toàn bộ danh sách các cột được đưa ra trong tập lệnh. Sao chép và sử dụng các trường nếu cần.

+3

Tác giả có thể muốn biết cách lấy tên cột từ bảng lập trình để sử dụng trong một thủ tục được lưu trữ hoặc tập lệnh khác. – KLee1

+1

Trạng thái câu trả lời '" Tôi muốn trả về những dữ liệu này "', 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. – StuperUser

4

tôi sử dụng

SELECT st.NAME, sc.NAME, sc.system_type_id 
FROM sys.tables st 
INNER JOIN sys.columns sc ON st.object_id = sc.object_id 
WHERE st.name LIKE '%Tablename%' 
8

này có vẻ hơi dễ dàng hơn sau đó những đề nghị trên vì nó sử dụng các chức năng object_id() để xác định vị trí 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 truy vấn tương tự để xem liệu cột tôi biết có phải là một phần của phiên bản mới hơn không. Đó 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 
-3
set fmtonly on 
select * from yourTable 
0

tôi chỉ sử dụng một truy vấn như Martin Smith đã đề cập, chỉ chút ngắn hơn:

SELECT COLUMN_NAME 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_NAME = 'YourTableName' 
4

Sau đây có vẻ là như truy vấn gợi ý đầu tiên ở trên nhưng đôi khi bạn cần phải chỉ định cơ sở dữ liệu để làm cho nó hoạt động.Lưu ý rằng các truy vấn cũng nên làm việc mà không nêu rõ TABLE_SCHEMA:

SELECT COLUMN_NAME 
FROM YOUR_DB_NAME.INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_NAME = 'YOUR_TABLE_NAME' AND TABLE_SCHEMA = 'YOUR_DB_NAME' 
0

Trong khi câu trả lời @Gulzar Nazim của là rất tốt, nó có lẽ là dễ dàng hơn để bao gồm tên cơ sở dữ liệu trong truy vấn, mà có thể đạt được bởi SQL sau .

SELECT COLUMN_NAME, * 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_NAME = 'you-table-name' AND TABLE_CATALOG='your-database-name' 
2

USE[Database] SELECT TABLE_NAME,TABLE_SCHEMA,[Column_Name],[Data_type] FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='dbo'

0
SELECT * 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_NAME = N'TableName' 
0

Kể từ SysColumns is deprecated, 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. Đâ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.

1

Bạn có thể sử dụng mã bên dưới để in tất cả các tên cột; Bạn cũng có thể thay đổi mã để in các chi tiết khác trong bất cứ định dạng u thích

declare @Result varchar(max)=' 
      ' 
      select @[email protected]+''+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 

Output

column1 
column2 
column3 
column4 

Để sử dụng cùng mã để in bảng và tên cột của nó là C# lớp sử dụng mã bên dưới:

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 

Output:

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"; } } 

} 
3

thử này

select * from <tablename> where 1=2 

................................... ............

0
DECLARE @col NVARCHAR(MAX); 
SELECT @col= COALESCE(@col, '') + ',' + COLUMN_NAME 
FROM INFORMATION_SCHEMA.COLUMNS WHERE Table_name = 'MxLocations'; 
SELECT @col; 
Các vấn đề liên quan