2013-02-11 43 views
14

我可以不用它的列数在SQL Server数据库:获得基本的SQL Server表的结构信息

SELECT COUNT(*) 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE table_name = 'Address' 

但是有什么办法(未知列数),我可以得到名字和每列的数据类型和长度?

+5

你是什么意思?如果你使用'SELECT *'而不是'SELECT COUNT(*)',你会得到列名,数据类型,长度和更多关于列的信息 – Lamak 2013-02-11 20:12:04

+0

你已经有了'INFORMATION_SCHEMA.COLUMNS'表,到底是什么在那里? – LittleBobbyTables 2013-02-11 20:12:10

+0

@LittleBobbyTables那么,这只是显示列的数量,而不是它们的名称或数据类型或长度。 – 1252748 2013-02-11 20:12:54

回答

43

而不是使用count(*),你可以SELECT *,你将返回所有的细节,你想包括data_type

SELECT * 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE table_name = 'Address' 

MSDN文档上INFORMATION_SCHEMA.COLUMNS

+0

是的,这正是我所需要的。是否存在将由此返回的信息转换为创建相同表的语句的功能?谢谢。 – 1252748 2013-02-11 20:16:28

+0

@thomas您可以使用动态sql并生成一个可以执行的sql字符串来创建一个新表。 – Taryn 2013-02-11 20:20:00

+0

@thomas你可以使用类似于这个sql小提琴演示代码中的代码 - http://www.sqlfiddle.com/#!3/24970/9 – Taryn 2013-02-11 20:43:52

15

sp_help会给你的信息有关一大堆一个包含列,键和约束的表。例如,运行

exec sp_help 'Address' 

会给你提供关于地址的信息。

3

Name and datatype:

USE OurDatabaseName 
GO 

SELECT 
    sc.name AS [Columne Name], 
    st1.name AS [User Type], 
    st2.name AS [Base Type] 
FROM dbo.syscolumns sc 
    INNER JOIN dbo.systypes st1 ON st1.xusertype = sc.xusertype 
    INNER JOIN dbo.systypes st2 ON st2.xusertype = sc.xtype 
-- STEP TWO: Change OurTableName to the table name 
WHERE sc.id = OBJECT_ID('OurTableName') 
ORDER BY sc.colid 

或者:

SELECT COLUMN_NAME AS ColumnName, DATA_TYPE AS DataType, CHARACTER_MAXIMUM_LENGTH AS CharacterLength 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_NAME = 'OurTableName' 
0

对于总列的信息使用下面的语法: 使用 “数据库名” 去 Exec的SP_COLUMNS “表名”

对于总表信息使用以下语法: 使用“DBName” go 执行SP_help“表名”

1

在查询编辑器中写入表名称选择名称并按下Alt + F1,它将带来表的所有信息。