ฉันต้องการสอบถามชื่อของคอลัมน์ทั้งหมดของตาราง ฉันพบวิธีการทำสิ่งนี้ใน:
แต่ฉันจำเป็นต้องรู้: สิ่งนี้สามารถทำได้ในMicrosoft SQL Server (2008 ในกรณีของฉัน)?
SELECT TOP 0 * FROM my_table
คือกดแป้นน้อย
ฉันต้องการสอบถามชื่อของคอลัมน์ทั้งหมดของตาราง ฉันพบวิธีการทำสิ่งนี้ใน:
แต่ฉันจำเป็นต้องรู้: สิ่งนี้สามารถทำได้ในMicrosoft SQL Server (2008 ในกรณีของฉัน)?
SELECT TOP 0 * FROM my_table
คือกดแป้นน้อย
คำตอบ:
คุณสามารถได้รับข้อมูลนี้และอื่น ๆ อีกมากโดยสอบถามมุมมองข้อมูล Schema
แบบสอบถามตัวอย่างนี้:
SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = N'Customers'
สามารถทำเหนือวัตถุฐานข้อมูลเหล่านี้ทั้งหมด:
Nortwind.
... )
SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = N'tableName';
สิ่งนี้ใช้ได้กับฉัน
TABLE_SCHEMA = '?' AND TABLE_NAME = '?'
ตั้งแต่ฉันอยู่ใน localhost และฉันมีหลายตารางที่มีชื่อเดียวกัน แต่ในฐานข้อมูลที่แตกต่างกัน
คุณสามารถใช้กระบวนงานที่เก็บไว้ sp_columns ซึ่งจะส่งคืนข้อมูลที่เกี่ยวข้องกับคอลัมน์ทั้งหมดสำหรับตารางที่กำหนด ข้อมูลเพิ่มเติมสามารถดูได้ที่นี่http://msdn.microsoft.com/en-us/library/ms176077.aspx
คุณยังสามารถทำได้โดยแบบสอบถาม SQL สิ่งนี้จะช่วยได้:
SELECT * FROM sys.columns WHERE object_id = OBJECT_ID('dbo.yourTableName')
หรือรูปแบบจะเป็น:
SELECT o.Name, c.Name
FROM sys.columns c
JOIN sys.objects o ON o.object_id = c.object_id
WHERE o.type = 'U'
ORDER BY o.Name, c.Name
สิ่งนี้จะได้รับคอลัมน์ทั้งหมดจากตารางทั้งหมดเรียงลำดับตามชื่อตารางและจากนั้นในชื่อคอลัมน์
select *
from INFORMATION_SCHEMA.COLUMNS
where TABLE_NAME='tableName'
สิ่งนี้ดีกว่าการมาจากsys.columns
เพราะมันแสดงDATA_TYPE
โดยตรง
AND TABLE_SCHEMA = 'schemaName'
เข้าไปในWHERE
clause
JOIN sys.types t on c.system_type_id = t.system_type_id
และเพิ่มt.name
คำสั่ง 'SELECT' ของคุณเพื่อรับชนิดถัดจากชื่อคอลัมน์แต่ละชื่อได้เช่นกัน
คุณสามารถใช้sp_help
ใน SQL Server 2008
sp_help <table_name>;
แป้นพิมพ์ลัดสำหรับคำสั่งดังกล่าวข้างต้น: เลือกชื่อตาราง (เช่นไฮไลต์) และกด+ALTF1
เมื่อใช้แบบสอบถามนี้คุณจะได้รับคำตอบ:
select Column_name
from Information_schema.columns
where Table_name like 'table name'
คุณสามารถเขียนแบบสอบถามนี้เพื่อรับชื่อคอลัมน์และรายละเอียดทั้งหมดโดยไม่ต้องใช้ INFORMATION_SCHEMA ใน MySql:
SHOW COLUMNS FROM database_Name.table_name;
--This is another variation used to document a large database for conversion (Edited to --remove static columns)
SELECT o.Name as Table_Name
, c.Name as Field_Name
, t.Name as Data_Type
, t.length as Length_Size
, t.prec as Precision_
FROM syscolumns c
INNER JOIN sysobjects o ON o.id = c.id
LEFT JOIN systypes t on t.xtype = c.xtype
WHERE o.type = 'U'
ORDER BY o.Name, c.Name
--In the left join, c.type is replaced by c.xtype to get varchar types
SELECT name
FROM sys.columns
WHERE object_id = OBJECT_ID('TABLE_NAME')
TABLE_NAME
เป็นตารางของคุณ
SELECT column_name, data_type, character_maximum_length, table_name,ordinal_position, is_nullable
FROM information_schema.COLUMNS WHERE table_name LIKE 'YOUR_TABLE_NAME'
ORDER BY ordinal_position
เพียงแค่เรียกใช้คำสั่งนี้
EXEC sp_columns 'Your Table Name'
คำถาม SO นี้ไม่มีวิธีการต่อไปนี้:
-- List down all columns of table 'Logging'
select * from sys.all_columns where object_id = OBJECT_ID('Logging')
คุณสามารถลองสิ่งนี้ได้ซึ่งจะให้ชื่อคอลัมน์ทั้งหมดด้วยประเภทข้อมูลที่เกี่ยวข้อง
desc <TABLE NAME> ;
คุณสามารถใช้แบบสอบถามนี้
SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME like N'%[ColumnName]%' and TABLE_NAME = N'[TableName]'
SELECT c.Name
FROM sys.columns c
JOIN sys.objects o ON o.object_id = c.object_id
WHERE o.object_id = OBJECT_ID('TABLE_NAME')
ORDER BY c.Name
อีกตัวเลือกหนึ่งซึ่งมีเนื้อหาที่เข้าใจง่ายกว่าคือ:
SELECT [name]
FROM sys.columns
WHERE object_id = OBJECT_ID('[yourSchemaType].[yourTableName]')
สิ่งนี้จะให้ชื่อคอลัมน์ทั้งหมดของคุณในคอลัมน์เดียว หากคุณสนใจเกี่ยวกับเมตาดาต้าอื่น ๆ SELECT *
ที่คุณสามารถเปลี่ยนแปลงแก้ไขคำสั่ง
สรุปคำตอบ
ฉันสามารถดูคำตอบที่แตกต่างและวิธีการที่จะทำเช่นนี้ objective
แต่มีถูในนี้และที่เป็น
ใช่วัตถุประสงค์ หากคุณต้องการonly know
ชื่อคอลัมน์คุณสามารถใช้
SELECT * FROM my_table WHERE 1=0
or
SELECT TOP 0 * FROM my_table
แต่ถ้าคุณต้องการuse
คอลัมน์เหล่านั้นที่ใดที่หนึ่งหรือเพียงแค่พูดว่าmanipulate
พวกเขาแล้วการสืบค้นด่วนข้างต้นจะไม่เป็นการใช้งานใด ๆ คุณต้องใช้
SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = N'Customers'
อีกวิธีหนึ่งในการรู้คอลัมน์เฉพาะที่เราต้องการบางคอลัมน์ที่คล้ายกัน
SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME like N'%[ColumnName]%' and TABLE_NAME = N'[TableName]'
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'name_of_your_table'
SELECT TOP (0) [toID]
,[sourceID]
,[name]
,[address]
FROM [ReportDatabase].[Ticket].[To]
ง่ายและไม่จำเป็นต้องมีตารางใด ๆ
SELECT * FROM my_table WHERE 1=0