sp_help中获取表字段属性的SQL

计划开发一款用于SQL表结构对比的小工具,该工具能够对比单个或多个表之间的差异,并根据差异生成同步表结构的SQL及回滚SQL,便于进行数据库更新测试。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

昨天老大说他 有工具对比所有表的结构的差异,但我想可能还是那种能比不能生成矫正语句那种,所以这两天想做个能生成同步表结构SQL的小工具.
功能要求:
1.能对比单个表或正多个表之间的差异
2.能根据差异生成同步结构的SQL
3.能生成回滚的SQL方便测试

这时候想起了sp_help这个东东,看了看代码,分离出一段只显示表字段属性的SQL,我想应该用的上,先记录下来,留待备用 :)

declare @objname nvarchar(776)
--要分析的表的表名
set @objname = '要分析的表的表名'

declare @objid int
declare @sysobj_type char(2)
select @objid = object_id@sysobj_type = type from sys.all_objects where object_id = object_id(@objname)

declare    @dbname    sysname
        ,
@no varchar(35), @yes varchar(35), @none varchar(35)
select @no = 'no'@yes = 'yes'@none = 'none'

declare @numtypes nvarchar(80)
select @numtypes = N'tinyint,smallint,decimal,int,real,money,float,numeric,smallmoney'

select
            
'Column_name'            = name,
            
'Type'                    = type_name(user_type_id),
               
'Computed'                = case when ColumnProperty(object_id, name, 'IsComputed'= 0 then @no else @yes end,
            
'Length'                    = convert(int, max_length),
            
'Prec'                    = case when charindex(type_name(system_type_id), @numtypes> 0
                                        
then convert(char(5),ColumnProperty(object_id, name, 'precision'))
                                        
else '     ' end,
            
'Scale'                    = case when charindex(type_name(system_type_id), @numtypes> 0
                                        
then convert(char(5),OdbcScale(system_type_id,scale))
                                        
else '     ' end,
            
'Nullable'                = case when is_nullable = 0 then @no else @yes end,
            
'TrimTrailingBlanks'    = case ColumnProperty(object_id, name, 'UsesAnsiTrim')
                                        
when 1 then @no
                                        
when 0 then @yes
                                        
else '(n/a)' end,
            
'FixedLenNullInSource'    = case
                        
when type_name(system_type_id) not in ('varbinary','varchar','binary','char')
                            
then '(n/a)'
                        
when is_nullable = 0 then @no else @yes end,
            
'Collation'        = collation_name
from sys.all_columns where object_id = @objid
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值