Làm cách nào để trả lại tên cột của bảng bằng SQL Server 2008? tức là một bảng chứa các cột-id, tên, địa chỉ, quốc gia và tôi muốn trả lại các dữ liệu này dưới dạng dữ liệu.Làm thế nào để bạn trả lại tên cột của một bảng?
Trả lời
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'
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
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
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
@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
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
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
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
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 –
Đây là cách đơn giản nhất
exec sp_columns [tablename]
Đ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
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.
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
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
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%'
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
set fmtonly on
select * from yourTable
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'
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'
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'
USE[Database] SELECT TABLE_NAME,TABLE_SCHEMA,[Column_Name],[Data_type] FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='dbo'
SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = N'TableName'
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
.
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"; } }
}
thử này
select * from <tablename> where 1=2
................................... ............
DECLARE @col NVARCHAR(MAX);
SELECT @col= COALESCE(@col, '') + ',' + COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS WHERE Table_name = 'MxLocations';
SELECT @col;
- 1. Làm thế nào để đếm cột của một bảng
- 2. SQL - Làm thế nào để có được Tên Cột Key của Unique từ Bảng
- 3. Tại sao getGeneratedKeys() trả lại "GENERATED_KEY" làm tên cột?
- 4. MYSQL: làm thế nào để "sắp xếp lại" một bảng
- 5. Làm thế nào để bạn khớp nhiều cột trong một bảng với SQLite FTS3?
- 6. Làm thế nào để trả lại một bảng từ một thủ tục lưu trữ?
- 7. Làm thế nào để chuyển đổi tên hàng của bảng vào một vector
- 8. Làm thế nào để trả lại một fstream (C++ 0x)
- 9. Làm thế nào để bạn thay đổi kiểu dữ liệu của một cột trong MS SQL?
- 10. Làm thế nào để bạn trả lại một Iterator trong Scala?
- 11. Làm thế nào để đặt tên cho cột đầu tiên giấu tên của một data.frame
- 12. Làm thế nào để bạn lập trình (lại) ký một hội đồng .NET với tên mạnh?
- 13. Làm thế nào để thay đổi định dạng của một cột của bảng excel trong C#?
- 14. Làm thế nào để transpose hàng bảng mysql vào cột
- 15. tên cột trả lại từ câu lệnh pyodbc execute()
- 16. Làm thế nào để bạn loại bỏ một cột khỏi một mảng có cấu trúc?
- 17. Đổi tên các cột của một bảng SQL với các giá trị trường của một bảng
- 18. tên cột cho một bảng hình thành bởi một UNION
- 19. Làm thế nào để bạn thả một giá trị mặc định từ một cột trong một bảng?
- 20. Hạn chế tên cột của bảng Postgres?
- 21. Làm cách nào bạn có thể đặt tên cho Bảng dữ liệu của bảng dữ liệu mà bạn quay trở lại trong một proc được lưu trữ?
- 22. Làm thế nào để bạn xác định không gian tên của một hàm?
- 23. Làm thế nào để trả về một data.frame với một tên đã cho từ một hàm?
- 24. Làm thế nào để tìm tổng của nhiều cột trong một bảng trong SQL Server 2005?
- 25. Bạn sẽ tạo một bảng hai cột bằng cành cây như thế nào?
- 26. Trong PostgreSQL, làm thế nào để bạn chèn vào một bảng chỉ với một cột nhận dạng?
- 27. Làm thế nào để thêm một cột mới vào một bảng hiện có
- 28. LINQ: Lấy Tên Cột Bảng
- 29. Làm thế nào để tự động thêm một cột mới vào một bảng HTML
- 30. Làm thế nào để bạn trả về một hằng số từ một câu lệnh sql?
'YourSchemaName' là gì? – Drewdin
'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
Đừ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