ฉันจะคืนชื่อคอลัมน์ของตารางโดยใช้ SQL Server 2008 ได้อย่างไร เช่นตารางที่มีคอลัมน์ - id, ชื่อ, ที่อยู่, ประเทศและฉันต้องการคืนค่าเหล่านี้เป็นข้อมูล
ฉันจะคืนชื่อคอลัมน์ของตารางโดยใช้ SQL Server 2008 ได้อย่างไร เช่นตารางที่มีคอลัมน์ - id, ชื่อ, ที่อยู่, ประเทศและฉันต้องการคืนค่าเหล่านี้เป็นข้อมูล
คำตอบ:
ไม่แน่ใจว่ามีวิธีที่ง่ายกว่าในรุ่น 2008 หรือไม่
USE [Database Name]
SELECT COLUMN_NAME,*
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'YourTableName' AND TABLE_SCHEMA='YourSchemaName'
นี่เป็นวิธีที่ง่ายที่สุด
exec sp_columns [tablename]
อะไรแบบนี้?
sp_columns @table_name=your table name
วิธีหนึ่งคือการค้นหา 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
คอลัมน์ที่ซ้ำซ้อน :) :)
ดูเหมือนว่าจะง่ายกว่าคำแนะนำข้างต้นเล็กน้อยเพราะใช้ฟังก์ชัน OBJECT_ID ()เพื่อค้นหารหัสของตาราง คอลัมน์ใด ๆ ที่มีรหัสนั้นเป็นส่วนหนึ่งของตาราง
SELECT *
FROM syscolumns
WHERE id=OBJECT_ID('YOUR_TABLE')
ฉันมักจะใช้แบบสอบถามที่คล้ายกันเพื่อดูว่าคอลัมน์ที่ฉันรู้ว่าเป็นส่วนหนึ่งของรุ่นที่ใหม่กว่าอยู่หรือไม่ มันเป็นข้อความค้นหาเดียวกันกับการเพิ่ม {AND name = 'YOUR_COLUMN'} ในส่วนคำสั่ง where
IF EXISTS (
SELECT *
FROM syscolumns
WHERE id=OBJECT_ID('YOUR_TABLE')
AND name='YOUR_COLUMN'
)
BEGIN
PRINT 'Column found'
END
ลองนี้
select * from <tablename> where 1=2
...............................................
WHERE 1=2
และมันจะยังคงกลับเมตาดาต้าคอลัมน์ หากใช้อินเทอร์เฟซแบบเป็นโปรแกรมเช่น ODBC ข้อมูลคอลัมน์นี้สามารถเข้าถึงได้เป็นรายการ / อาร์เรย์จากวัตถุเคอร์เซอร์ภายในโปรแกรมซึ่งเป็นสิ่งที่ฉันกำลังมองหา มันอาจไม่สมเหตุสมผลในบริบท SQL แท้ๆ แต่เป็นแนวทางที่กระชับเมื่อเชื่อมต่อกับฐานข้อมูลผ่าน Python / Java / C / ฯลฯ
ต่อไปนี้ดูเหมือนจะเป็นข้อความค้นหาแรกที่แนะนำข้างต้น แต่บางครั้งคุณต้องระบุฐานข้อมูลเพื่อให้มันทำงาน โปรดทราบว่าแบบสอบถามควรทำงานได้โดยไม่ต้องระบุ TABLE_SCHEMA:
SELECT COLUMN_NAME
FROM YOUR_DB_NAME.INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'YOUR_TABLE_NAME' AND TABLE_SCHEMA = 'YOUR_DB_NAME'
ฉันใช้
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%'
ทำไมไม่ลองอันนี้:
คลิกขวาบนตาราง -> ตารางสคริปต์เป็น -> สร้างถึง -> หน้าต่างตัวแก้ไขคิวรีใหม่?
รายการคอลัมน์ทั้งหมดจะได้รับในสคริปต์ คัดลอกและใช้ฟิลด์ตามที่จำเป็น
"I want to return these as data"
ในขณะที่คำตอบของคุณจะได้รับค่าเป็นไปได้ว่า OP ต้องการข้อมูลในขณะทำงาน
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
ฉันไม่แน่ใจว่าค่า syscolumns.colid เป็นค่าเดียวกับค่า 'ORDINAL_POSITION' ที่ส่งคืนเป็นส่วนหนึ่งของ sp_columns หรือไม่ แต่ในสิ่งต่อไปนี้ฉันใช้มันในแบบนั้น - หวังว่าฉันจะไม่เข้าใจผิด ...
นี่คือความแตกต่างเล็กน้อยของคำตอบอื่น ๆ ที่ฉันพบ - ฉันใช้สิ่งนี้เพราะ 'ตำแหน่ง' หรือคำสั่งของคอลัมน์ในตารางมีความสำคัญในแอปพลิเคชันของฉัน - โดยทั่วไปฉันต้องรู้ 'คอลัมน์ (n) คืออะไร ?'
sp_columns ส่งคืนสิ่งที่ไม่เกี่ยวข้องทั้งหมดและฉันเลือกได้มากกว่าฟังก์ชั่น T-SQL ดังนั้นฉันจึงไปเส้นทางนี้:
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
แม้ว่าคำตอบของ @Gulzar Nazim นั้นยอดเยี่ยม แต่ก็อาจจะง่ายกว่าหากรวมชื่อฐานข้อมูลในแบบสอบถามซึ่งสามารถทำได้โดย SQL ต่อไปนี้
SELECT COLUMN_NAME, *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'you-table-name' AND TABLE_CATALOG='your-database-name'
คุณสามารถใช้รหัสด้านล่างเพื่อพิมพ์ชื่อคอลัมน์ทั้งหมด คุณยังสามารถแก้ไขรหัสเพื่อพิมพ์รายละเอียดอื่น ๆ ในรูปแบบใดก็ได้ที่คุณชอบ
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
เอาท์พุต
column1
column2
column3
column4
หากต้องการใช้รหัสเดียวกันเพื่อพิมพ์ตารางและชื่อคอลัมน์ในคลาส C # ให้ใช้รหัสด้านล่าง:
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
เอาท์พุท:
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"; } }
}
ฉันแค่ใช้แบบสอบถามอย่าง Martin Smith ที่กล่าวถึงเพียงเล็กน้อยสั้น ๆ :
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'YourTableName'
SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = N'TableName'
ตั้งแต่syscolumns จะเลิกใช้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
จะให้ผล user_type_id = ID
ของประเภท สิ่งนี้มีลักษณะเฉพาะในฐานข้อมูล 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;
หากคุณกำลังทำงานกับ postgresql มีความเป็นไปได้ที่มากกว่าหนึ่งสกีมาอาจมีตารางที่มีชื่อเดียวกันในกรณีนั้นใช้แบบสอบถามด้านล่าง
SELECT column_name, data_type
FROM information_schema.columns
WHERE table_name = 'your_table_name' AND table_schema = 'your_schema_name’;
set fmtonly on
select * from yourTable