sp_help中获取表字段属性的SQL

昨天老大说他 有工具对比所有表的结构的差异,但我想可能还是那种能比不能生成矫正语句那种,所以这两天想做个能生成同步表结构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
 
  • 0
    点赞
  • 0
    收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

linqingfeng

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值