SQL SERVER 获取表字段信息

CREATE PROCEDURE [Common].[ProcLoadColumnInfo]

@inObjectName sysname

AS

BEGIN

SELECT  TableCatalog = DB_NAME() ,

TableSchema = SCHEMA_NAME(C.schema_id) ,

TableName = D.name ,

ColumnName = A.name ,

ColumnPosition = A.colorder ,

DataType = B.name ,

MaximumLength = A.length ,

MaxLength = COLUMNPROPERTY(A.id, A.name, ‘PRECISION‘) ,

NumericScale = ISNULL(COLUMNPROPERTY(A.id, A.name, ‘SCALE‘), 0) ,

IsIdentity = CASE WHEN COLUMNPROPERTY(A.id, A.name,

‘ISIDENTITY‘) = 1 THEN 1

ELSE 0

END ,

IsPrimary = CASE WHEN EXISTS ( SELECT   1

FROM     sys.indexes idx ,

sys.index_columns idxCol

WHERE    idx.object_id = A.id

AND idx.is_primary_key = 1

AND idxCol.column_id = A.colid

AND idx.index_id = idxCol.index_id

AND idx.object_id = idxCol.object_id )

THEN 1

ELSE 0

END ,

IsNullable = A.isnullable ,

ColumnDefault = ISNULL(E.text, ‘‘) ,

ColumnDescription = ISNULL(G.[value], ‘‘)

FROM    syscolumns A

LEFT JOIN systypes B ON A.xtype = B.xusertype

INNER JOIN sys.objects C ON A.id = C.object_id

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

AND G.name = ‘MS_DESCRIPTION‘

WHERE   A.id = OBJECT_ID(@inObjectName)

ORDER BY A.id ,

A.colorder;

END;

GO

时间: 2024-12-11 23:51:19

SQL SERVER 获取表字段信息的相关文章

SQL SERVER获取错误文本信息

SQL SERVER获取错误文本信息,BDE.adoquery一直取不到,FDQuery可以了 Some DBMS, like SQL Server, return messages as an additional result set. So, to process messages, the application needs to process multiple result sets. Here is a more complex example, providing status

Oracle/MySQL/SQL Server修改表字段类型和长度

Oracle ALTER TABLE T_USER MODIFY USERNAME VARCHAR2(18); MySQL ALTER TABLE T_USER CHANGE USERNAME USERNAME VARCHAR(200) NOT NULL COMMENT 'username'; SQL Server ALTER TABLE T_USER ALTER COLUMN USERNAME VARCHAR(200); [注意]SQL Server 字段有约束或者索引,需要按如下方式处理:

net 对mssql 的操作(备份,还原,获取表数据,获取表字段信息)

#region 数据库管理 /// <summary> /// 还原恢复数据库 /// </summary> /// <param name="FilePath">保存路径</param> /// <returns></returns> public bool DataRestore(string FilePath) { string[] Connection = ConfigHelper.GetAppSettin

sql server 删除表字段和字段的约束

删除数据库表中的字段时,使用了 :alter table 表名 drop column 列名 服务器返回的错误为:Server: Msg 5074, Level 16, State 1, Line 1The object 约束名 is dependent on column 列名.Server: Msg 4922, Level 16, State 1, Line 1ALTER TABLE DROP COLUMN 列名 failed because one or more objects acce

SQL Server 联表字段合并查询

经常遇到统计报表中,子表记录合并为一个字段的情况.例如:省表中各省经济水平前五的城市统计. 有如下两表:dbo.省 和 dbo.市 (好吧,你可能会吐槽为什么用中文表名,其实我是为了方便查找替换) 这里暂时不考虑经济水平前五这种外部条件,期望将所有城市使用中文逗号拼接起来,如图: 具体做法如下: --基于子表查询 SELECT P.Name AS '省', STUFF((SELECT ','+Name FROM dbo.市 WHERE Parent=C.Parent FOR XML PATH('

SQL Server研究之统计信息—发现过期统计信息并处理详解

 前言: 统计信息是关于谓词中的数据分布的主要信息源,如果不知道具体的数据分布,优化器不能获得预估的数据集,从而不能统计需要返回的数据. 在创建列的统计信息后,在DML操作如insert.update.delete后,统计信息就会过时.因为这些操作更改了数据,影响了数据分布.此时需要更新统计信息. 在高活动的表中,统计信息可能几个小时就会过时.对于静态表,可能几个星期才会过时.这要视乎表上DML的操作. 从2000开始,SQLServer对增删改操作会增加在表sysindexes中的RowM

SQL Server获取索引创建时间&amp;重建时间&amp;重组时间

原文:SQL Server获取索引创建时间&重建时间&重组时间 之前写过一篇博客"SQL Server中是否可以准确获取最后一次索引重建的时间?",里面主要讲述了三个问题:我们能否找到索引的创建时间?最后一次索引重建(Index Rebuild)的时间? 最后一次索引重组(INDEX REORGANIZE)的时间呢?,当时得出的结论,答案是我们无法准确的找到索引的创建时间.最后一次索引重组时间,最后一次索引重建的时间.但是最近看到一篇博客"SQL Server

SQL Server获取下一个编码字符串的实现方案分割和进位

我在前一种解决方案SQL Server获取下一个编码字符实现和后一种解决方案SQL Server获取下一个编码字符实现继续重构与增强两篇博文中均提供了一种解决编码的方案,考虑良久对比以上两种方案的,后一种方案虽然解决了其中方案的缺点,但是依然存在的编码字符串长度的限制(最多满足8位长度),本博文提供的方案将编码字符串长度增加到19位,也可以足够项目中实现这些编码. 具体的编码规则可以参看以上两种解决方案博文中的描述,也可以进入SQL Server 大V潇湘隐者的获取下一个编码字符串问题这篇博文.

sql server 获取每一个类别中值最大的一条数据

sql server 获取每一个类别中值最大的一条数据 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 /* 数据如下: name val memo a    2   a2(a的第二个值) a    1   a1--a的第一个值 a    3   a3:a的第三个值 b    1   b1--b的第一个