[求助]sql server 查询列名、列数据类型、列长度 sql语句怎么写

zjun109 2009-08-12 02:15:39
sql server 查询列名、列数据类型、列长度 sql语句怎么写?
...全文
4321 25 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
水滴BOY 2011-10-14
  • 打赏
  • 举报
回复
试用了下liangCK的方法,这样可以查出所有数据库的数据库名、字段和字段对应数据类型以及长度,UP一下!
benbenbenjia 2011-01-28
  • 打赏
  • 举报
回复
是什么?
zjun109 2009-11-05
  • 打赏
  • 举报
回复
谢谢各位的解答,答案我已经找到了,忘了结贴,今天来补上。
现在回想起来这些东西都在系统表格里,当时还不知道系统表格这个东东。
xuejie09242 2009-08-18
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 guguda2008 的回复:]
好吧我承认我被吓到了
[/Quote]
有时间看一下MSSQL上的视图定义,呵呵。感觉有点象。
guguda2008 2009-08-13
  • 打赏
  • 举报
回复
MARK一下回头研究一下海爷的CASE WHEN
guguda2008 2009-08-13
  • 打赏
  • 举报
回复
好吧我承认我被吓到了
soft_wsx 2009-08-13
  • 打赏
  • 举报
回复
[code=SQL]SELECT 
(CASE WHEN a.colorder=1 THEN d.name ELSE '' END) N'表名',
a.colorder N'字段序号',
a.name N'字段名',
(CASE WHEN COLUMNPROPERTY( a.id,a.name,'IsIdentity')=1 THEN '√'ELSE '' END) N'标识',
(CASE WHEN (SELECT COUNT(*)
FROM sysobjects
WHERE (name in
(SELECT name
FROM sysindexes
WHERE (id = a.id) AND (indid in
(SELECT indid
FROM sysindexkeys
WHERE (id = a.id) AND (colid in
(SELECT colid
FROM syscolumns
WHERE (id = a.id) AND (name = a.name))))))) AND
(xtype = 'PK'))>0 THEN '√' ELSE '' END) N'主键',
b.name N'类型',
a.length N'占用字节数',
COLUMNPROPERTY(a.id,a.name,'PRECISION') AS N'长度',
ISNULL(COLUMNPROPERTY(a.id,a.name,'Scale'),0) AS N'小数位数',
(CASE WHEN a.isnullable=1 THEN '√'ELSE '' END) N'允许空',
ISNULL(e.text,'') N'默认值',
ISNULL(g.[value],'') AS N'字段说明'

FROM syscolumns a
LEFT JOIN systypes b on a.xtype=b.xusertype
INNER JOIN sysobjects d on a.id=d.id AND d.xtype='U' AND d.name<>'dtproperties'
LEFT JOIN syscomments e on a.cdefault=e.id
LEFT JOIN sysproperties g on a.id=g.id AND a.colid=g.smallid
--WHERE
--d.name = '表名' --要查询的表
ORDER BY
object_name(a.id), a.colorder

/*
表名 所有者 字段序号 字段名 是否标识列 主键 类型 占用字节数 长度 小数位数 允许空 默认值 字段说明
sp_pici dbo 1 pici √ varchar 20 20 0 ('')
dbo 2 spid √ char 11 11 0 ('')
dbo 3 pihao varchar 20 20 0 √ ('')
dbo 4 djbh char 15 15 0 √ ('')
dbo 5 rq char 10 10 0 √ ('')
dbo 6 gebjj decimal 9 14 6 √ (0)
dbo 7 hw √ char 11 11 0 ('')
dbo 8 shl decimal 9 14 2 √ (0)
dbo 9 dwbh char 11 11 0 √ ('')
dbo 10 sxrq char 10 10 0 √ ('')
dbo 11 xsshl decimal 9 14 2 √ (0)
dbo 12 is_dp char 2 2 0 √ ('否')
dbo 13 xsqu varchar 100 100 0 √ ('')
dbo 14 isxs char 2 2 0 √ ('否')
dbo 15 jwh char 10 10 0 √ ('')
dbo 16 jwhbz char 50 50 0 √ ('')
dbo 17 baozhiqi char 10 10 0 √ ('')
*/[/code]
xuejie09242 2009-08-13
  • 打赏
  • 举报
回复
用INFORMATION_SCHEMA视图好些。
select * from INFORMATION_SCHEMA.COLUMNS
where TABLE_NAME = 'Customer'

东西还是比较全的,而且MS会保持这个视图不变的
相对比较安全
振乾 2009-08-13
  • 打赏
  • 举报
回复


--数据库中所有表的信息(很强悍的)

SELECT
表名 = CASE WHEN A.COLORDER=1 THEN D.NAME ELSE ' ' END,
表說明 = CASE WHEN A.COLORDER=1 THEN ISNULL(F.VALUE, ' ') ELSE ' ' END,
欄位序號 = A.COLORDER,
欄位名 = A.NAME,
標識 = CASE WHEN COLUMNPROPERTY( A.ID,A.NAME, 'ISIDENTITY ')=1 THEN '√ 'ELSE ' ' END,
主鍵 = CASE WHEN EXISTS(SELECT 1 FROM SYSOBJECTS WHERE XTYPE= 'PK ' AND PARENT_OBJ=A.ID AND NAME IN (
SELECT NAME FROM SYSINDEXES WHERE INDID IN(
SELECT INDID FROM SYSINDEXKEYS WHERE ID = A.ID AND COLID=A.COLID))) THEN '√ ' ELSE ' ' END,
類型 = B.NAME,
佔用位元組數 = A.LENGTH,
長度 = COLUMNPROPERTY(A.ID,A.NAME, 'PRECISION '),
小數位數 = ISNULL(COLUMNPROPERTY(A.ID,A.NAME, 'SCALE '),0),
允許空 = CASE WHEN A.ISNULLABLE=1 THEN '√ 'ELSE ' ' END,
預設值 = ISNULL(E.TEXT, ' '),
欄位說明 = ISNULL(G.[VALUE], ' ')
FROM
SYSCOLUMNS A
LEFT JOIN
SYSTYPES B
ON
A.XUSERTYPE=B.XUSERTYPE
INNER JOIN
SYSOBJECTS D
ON
A.ID=D.ID AND D.XTYPE= 'U ' AND D.NAME <> 'DTPROPERTIES '
LEFT JOIN
SYSCOMMENTS E
ON
A.CDEFAULT=E.ID
LEFT JOIN
sys.extended_properties G
ON
A.ID=G.major_id AND A.COLID=G.minor_id
LEFT JOIN
sys.extended_properties F
ON
D.ID=F.major_id AND F.minor_id=0
ORDER BY
A.ID,A.COLORDER

再来一个这个把数据库中所有的表的详细信息都给列出来了。
振乾 2009-08-13
  • 打赏
  • 举报
回复
你试下看!
振乾 2009-08-13
  • 打赏
  • 举报
回复

declare @table_name as varchar(max)
set @table_name = '你的表名'
select sys.columns.name, sys.types.name, sys.columns.max_length, sys.columns.is_nullable,
(select count(*) from sys.identity_columns where sys.identity_columns.object_id = sys.columns.object_id and sys.columns.column_id = sys.identity_columns.column_id) as is_identity ,
(select value from sys.extended_properties where sys.extended_properties.major_id = sys.columns.object_id and sys.extended_properties.minor_id = sys.columns.column_id) as description
from sys.columns, sys.tables, sys.types where sys.columns.object_id = sys.tables.object_id and sys.columns.system_type_id=sys.types.system_type_id and sys.tables.name=@table_name order by sys.columns.column_id





这个可以看到表中列的详细信息,
很不错的!
jeansy911 2009-08-12
  • 打赏
  • 举报
回复
7# 啊。。。。。。。我眼前一亮的一楼。

理解错误了 但是太强大了。
SQL77 2009-08-12
  • 打赏
  • 举报
回复
SELECT name,Xtype,length FROM syscolumns  WHERE ID= OBJECT_ID('NUM')

2000
csdyyr 2009-08-12
  • 打赏
  • 举报
回复
select name as colName,type_name(xtype) as colType,length
from syscolumns
where id=object_id('tableName')
lavly 2009-08-12
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 fredrickhu 的回复:]
SQL code计算一个库里各个表的记录总数:select b.name,a.rowcntfrom sysindexes a,sysobjects bwhere a.id=b.idand a.indid<2and b.xtype='u'--统计数据库里每个表的详细情况EXEC sp_MSforeachtable@command1="sp_spaceused'?'"--获得每个表的记录数和容量:EX¡­
[/Quote]



正确
liangCK 2009-08-12
  • 打赏
  • 举报
回复
海爷.你吓到我了.
zjb211434 2009-08-12
  • 打赏
  • 举报
回复
SELECT a.colid as ID,a.name as ColumnName,b.name as DataType,a.length as Length FROM syscolumns a,systypes b WHERE a.id=object_id('相应表名') and a.xtype=b.xtype and b.name <> 'sysname' order by a.colid
昵称被占用了 2009-08-12
  • 打赏
  • 举报
回复
	SELECT
C.column_id
,C.name
,type = T.name + CASE T.user_type_id WHEN 41 THEN '('+CAST(C.scale AS VARCHAR) +')' -- time
WHEN 42 THEN '('+CAST(C.scale AS VARCHAR) +')' -- datetime2
WHEN 43 THEN '('+CAST(C.scale AS VARCHAR) +')' -- datetimeoffset
WHEN 106 THEN '('+CAST(C.precision AS VARCHAR)+','+ CAST(C.scale AS VARCHAR) +')' -- decimal
WHEN 108 THEN '('+CAST(C.precision AS VARCHAR)+','+ CAST(C.scale AS VARCHAR) +')' -- numeric
WHEN 165 THEN '('+ISNULL(CAST(NULLIF(C.max_length,-1) AS VARCHAR),'MAX') +')' -- varbinary
WHEN 167 THEN '('+ISNULL(CAST(NULLIF(C.max_length,-1) AS VARCHAR),'MAX') +')' -- varchar
WHEN 173 THEN '('+ISNULL(CAST(NULLIF(C.max_length,-1) AS VARCHAR),'MAX') +')' -- binary
WHEN 175 THEN '('+ISNULL(CAST(NULLIF(C.max_length,-1) AS VARCHAR),'MAX') +')' -- char
WHEN 231 THEN '('+ISNULL(CAST(NULLIF(C.max_length,-1) AS VARCHAR),'MAX') +')' -- nvarchar
WHEN 239 THEN '('+ISNULL(CAST(NULLIF(C.max_length,-1) AS VARCHAR),'MAX') +')' -- nchar
ELSE ''
END
,C.is_identity
,C.is_nullable
,DefaultText = ISNULL(STUFF(LEFT(D.definition,LEN(D.definition)-1),1,1,''),'')
FROM sys.columns C
INNER JOIN sys.types T ON C.user_type_id = T.user_type_id
LEFT JOIN sys.default_constraints D ON D.[object_id] =C.default_object_id
AND D.parent_object_id = C.[object_id] AND D.parent_column_id = C.column_id
WHERE C.[object_id] = OBJECT_ID('你的表名');
--小F-- 2009-08-12
  • 打赏
  • 举报
回复
说明:列出数据库里所有的表名 
select name from sysobjects where type='U'

说明:列出表里的所有的列
select name from syscolumns where id=object_id('TableName')
liangCK 2009-08-12
  • 打赏
  • 举报
回复
海爷.你吓到我了.
加载更多回复(4)

34,838

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧