• 一些有用的SQL Server语句和存储过程


      1-- ======================================================
      2
      3--列出SQL SERVER 所有表,字段名,主键,类型,长度,小数位数等信息
      4
      5--在查询分析器里运行即可,可以生成一个表,导出到EXCEL中
      6
      7-- ======================================================
      8
      9Select 
     10
     11       (Case When A.Colorder=1 Then D.Name Else '' End)表名,
     12
     13       A.Colorder 字段序号,
     14
     15       A.Name 字段名,
     16
     17       (Case When Columnproperty( A.Id,A.Name,'Isidentity')=1 Then ''Else '' End) 标识,
     18
     19       (Case When (Select Count(*)
     20
     21       From Sysobjects
     22
     23       Where (Name In
     24
     25                 (Select Name
     26
     27                From Sysindexes
     28
     29                Where (Id = A.Id) And (Indid In
     30
     31                          (Select Indid
     32
     33                         From Sysindexkeys
     34
     35                         Where (Id = A.Id) And (Colid In
     36
     37                                   (Select Colid
     38
     39                                  From Syscolumns
     40
     41                                  Where (Id = A.Id) And (Name = A.Name))))))) And
     42
     43              (Xtype = 'Pk'))>0 Then '' Else '' End) 主键,
     44
     45       B.Name 类型,
     46
     47       A.Length 占用字节数,
     48
     49       Columnproperty(A.Id,A.Name,'Precision'As 长度,
     50
     51       Isnull(Columnproperty(A.Id,A.Name,'Scale'),0As 小数位数,
     52
     53       (Case When A.Isnullable=1 Then ''Else '' End) 允许空,
     54
     55       Isnull(E.Text,'') 默认值,
     56
     57       Isnull(G.[Value],''As 字段说明    
     58
     59From  Syscolumns  A Left Join Systypes B 
     60
     61On  A.Xtype=B.Xusertype
     62
     63Inner Join Sysobjects D 
     64
     65On A.Id=D.Id  And  D.Xtype='U' And  D.Name<>'Dtproperties'
     66
     67Left Join Syscomments E
     68
     69On A.Cdefault=E.Id
     70
     71Left Join Sysproperties G
     72
     73On A.Id=G.Id And A.Colid = G.Smallid  
     74
     75Order By A.Id,A.Colorder
     76
     77列出SQL SERVER 所有表、字段定义,类型,长度,一个值等信息
     78
     79并导出到Excel 中
     80
     81-- ======================================================
     82
     83-- Export all user tables definition and one sample value
     84
     85-- jan-13-2003,Dr.Zhang
     86
     87-- ======================================================
     88
     89在查询分析器里运行:
     90
     91SET ANSI_NULLS OFF 
     92
     93GO
     94
     95SET NOCOUNT ON
     96
     97GO
     98
     99 
    100
    101SET LANGUAGE 'Simplified Chinese'
    102
    103go
    104
    105DECLARE @tbl nvarchar(200),@fld nvarchar(200),@sql nvarchar(4000),@maxlen int,@sample nvarchar(40)
    106
    107 
    108
    109SELECT d.name TableName,a.name FieldName,b.name TypeName,a.length Length,a.isnullable IS_NULL INTO #t
    110
    111FROM  syscolumns  a,  systypes b,sysobjects d  
    112
    113WHERE  a.xtype=b.xusertype  and  a.id=d.id  and  d.xtype='U' 
    114
    115 
    116
    117DECLARE read_cursor CURSOR
    118
    119FOR SELECT TableName,FieldName FROM #t
    120
    121 
    122
    123SELECT TOP 1 '_TableName                     ' TableName,
    124
    125            'FieldName                      ' FieldName,'TypeName             ' TypeName,
    126
    127            'Length' Length,'IS_NULL' IS_NULL, 
    128
    129            'MaxLenUsed' AS MaxLenUsed,'Sample Value          ' Sample,
    130
    131             'Comment   ' Comment INTO #tc FROM #t
    132
    133 
    134
    135OPEN read_cursor
    136
    137 
    138
    139FETCH NEXT FROM read_cursor INTO @tbl,@fld
    140
    141WHILE (@@fetch_status <> -1)  --- failes
    142
    143BEGIN
    144
    145       IF (@@fetch_status <> -2-- Missing
    146
    147       BEGIN
    148
    149              SET @sql=N'SET @maxlen=(SELECT max(len(cast('+@fld+' as nvarchar))) FROM '+@tbl+')'
    150
    151              --PRINT @sql
    152
    153              EXEC SP_EXECUTESQL @sql,N'@maxlen int OUTPUT',@maxlen OUTPUT
    154
    155              --print @maxlen
    156
    157              SET @sql=N'SET @sample=(SELECT TOP 1 cast('+@fld+' as nvarchar) FROM '+@tbl+' WHERE len(cast('+@fld+' as nvarchar))='+convert(nvarchar(5),@maxlen)+')'
    158
    159              EXEC SP_EXECUTESQL @sql,N'@sample varchar(30) OUTPUT',@sample OUTPUT
    160
    161              --for quickly   
    162
    163              --SET @sql=N'SET @sample=convert(varchar(20),(SELECT TOP 1 '+@fld+' FROM '+
    164
    165                     --@tbl+' order by 1 desc ))'  
    166
    167              PRINT @sql
    168
    169              print @sample
    170
    171              print @tbl
    172
    173              EXEC SP_EXECUTESQL @sql,N'@sample nvarchar(30) OUTPUT',@sample OUTPUT
    174
    175              INSERT INTO #tc SELECT *,ltrim(ISNULL(@maxlen,0)) as MaxLenUsed,
    176
    177                     convert(nchar(20),ltrim(ISNULL(@sample,' '))) as Sample,' ' Comment FROM #t where TableName=@tbl and FieldName=@fld
    178
    179       END
    180
    181       FETCH NEXT FROM read_cursor INTO @tbl,@fld
    182
    183END
    184
    185 
    186
    187CLOSE read_cursor
    188
    189DEALLOCATE read_cursor
    190
    191GO
    192
    193 
    194
    195SET ANSI_NULLS ON
    196
    197GO
    198
    199SET NOCOUNT OFF
    200
    201GO
    202
    203select count(*)  from #t
    204
    205DROP TABLE #t
    206
    207GO
    208
    209 
    210
    211select count(*)-1  from #tc
    212
    213 
    214
    215select * into ##tx from #tc order by tablename
    216
    217DROP TABLE #tc
    218
    219 
    220
    221--select * from ##tx
    222
    223 
    224
    225declare @db nvarchar(60),@sql nvarchar(3000)
    226
    227set @db=db_name()
    228
    229--请修改用户名和口令 导出到Excel 中
    230
    231set @sql='exec master.dbo.xp_cmdshell ''bcp ..dbo.##tx out c:\'+@db+'_exp.xls -w -C936 -Usa -Psa '''
    232
    233print @sql
    234
    235exec(@sql)
    236
    237GO
    238
    239DROP TABLE ##tx
    240
    241GO
    242
    243 
    244
    245 
    246
    247 
    248
    249-- ======================================================
    250
    251--根据表中数据生成insert语句的存储过程
    252
    253--建立存储过程,执行 spGenInsertSQL 表名
    254
    255--感谢playyuer
    256
    257-- ======================================================
    258
    259CREATE   proc spGenInsertSQL (@tablename varchar(256))
    260
    261 
    262
    263as
    264
    265begin
    266
    267  declare @sql varchar(8000)
    268
    269  declare @sqlValues varchar(8000)
    270
    271  set @sql =' ('
    272
    273  set @sqlValues = 'values (''+'
    274
    275  select @sqlValues = @sqlValues + cols + ' + '','' + ' ,@sql = @sql + '[' + name + '],' 
    276
    277    from 
    278
    279        (select case 
    280
    281                  when xtype in (48,52,56,59,60,62,104,106,108,122,127)                                
    282
    283                       then 'case when '+ name +' is null then ''NULL'' else ' + 'cast('+ name + ' as varchar)'+' end'
    284
    285                  when xtype in (58,61)
    286
    287                       then 'case when '+ name +' is null then ''NULL'' else '+''''''''' + ' + 'cast('+ name +' as varchar)'+ '+'''''''''+' end'
    288
    289                 when xtype in (167)
    290
    291                       then 'case when '+ name +' is null then ''NULL'' else '+''''''''' + ' + 'replace('+ name+','''''''','''''''''''')' + '+'''''''''+' end'
    292
    293                  when xtype in (231)
    294
    295                       then 'case when '+ name +' is null then ''NULL'' else '+'''N'''''' + ' + 'replace('+ name+','''''''','''''''''''')' + '+'''''''''+' end'
    296
    297                  when xtype in (175)
    298
    299                       then 'case when '+ name +' is null then ''NULL'' else '+''''''''' + ' + 'cast(replace('+ name+','''''''','''''''''''') as Char(' + cast(length as varchar)  + '))+'''''''''+' end'
    300
    301                  when xtype in (239)
    302
    303                       then 'case when '+ name +' is null then ''NULL'' else '+'''N'''''' + ' + 'cast(replace('+ name+','''''''','''''''''''') as Char(' + cast(length as varchar)  + '))+'''''''''+' end'
    304
    305                  else '''NULL'''
    306
    307                end as Cols,name
    308
    309           from syscolumns  
    310
    311          where id = object_id(@tablename
    312
    313        ) T 
    314
    315  set @sql ='select ''INSERT INTO ['+ @tablename + ']' + left(@sql,len(@sql)-1)+'' + left(@sqlValues,len(@sqlValues)-4+ ')'' from '+@tablename
    316
    317  --print @sql
    318
    319  exec (@sql)
    320
    321end
    322
    323 
    324
    325GO
    326
    327 
    328
    329 
    330
    331 
    332
    333-- ======================================================
    334
    335--根据表中数据生成insert语句的存储过程
    336
    337--建立存储过程,执行 proc_insert 表名
    338
    339--感谢Sky_blue
    340
    341-- ======================================================
    342
    343 
    344
    345CREATE proc proc_insert (@tablename varchar(256))
    346
    347as
    348
    349begin
    350
    351       set nocount on
    352
    353       declare @sqlstr varchar(4000)
    354
    355       declare @sqlstr1 varchar(4000)
    356
    357       declare @sqlstr2 varchar(4000)
    358
    359       select @sqlstr='select ''insert '+@tablename
    360
    361       select @sqlstr1=''
    362
    363       select @sqlstr2=' ('
    364
    365       select @sqlstr1= ' values ( ''+'
    366
    367       select @sqlstr1=@sqlstr1+col+'+'',''+' ,@sqlstr2=@sqlstr2+name +',' from (select case 
    368
    369--     when a.xtype =173 then 'case when '+a.name+' is null then ''NULL'' else '+'convert(varchar('+convert(varchar(4),a.length*2+2)+'),'+a.name +')'+' end'
    370
    371       when a.xtype =104 then 'case when '+a.name+' is null then ''NULL'' else '+'convert(varchar(1),'+a.name +')'+' end'
    372
    373       when a.xtype =175 then 'case when '+a.name+' is null then ''NULL'' else '+'''''''''+'+'replace('+a.name+','''''''','''''''''''')' + '+'''''''''+' end'
    374
    375       when a.xtype =61  then 'case when '+a.name+' is null then ''NULL'' else '+'''''''''+'+'convert(varchar(23),'+a.name +',121)'+ '+'''''''''+' end'
    376
    377       when a.xtype =106 then 'case when '+a.name+' is null then ''NULL'' else '+'convert(varchar('+convert(varchar(4),a.xprec+2)+'),'+a.name +')'+' end'
    378
    379       when a.xtype =62  then 'case when '+a.name+' is null then ''NULL'' else '+'convert(varchar(23),'+a.name +',2)'+' end'
    380
    381       when a.xtype =56  then 'case when '+a.name+' is null then ''NULL'' else '+'convert(varchar(11),'+a.name +')'+' end'
    382
    383       when a.xtype =60  then 'case when '+a.name+' is null then ''NULL'' else '+'convert(varchar(22),'+a.name +')'+' end'
    384
    385       when a.xtype =239 then 'case when '+a.name+' is null then ''NULL'' else '+'''''''''+'+'replace('+a.name+','''''''','''''''''''')' + '+'''''''''+' end'
    386
    387       when a.xtype =108 then 'case when '+a.name+' is null then ''NULL'' else '+'convert(varchar('+convert(varchar(4),a.xprec+2)+'),'+a.name +')'+' end'
    388
    389       when a.xtype =231 then 'case when '+a.name+' is null then ''NULL'' else '+'''''''''+'+'replace('+a.name+','''''''','''''''''''')' + '+'''''''''+' end'
    390
    391       when a.xtype =59  then 'case when '+a.name+' is null then ''NULL'' else '+'convert(varchar(23),'+a.name +',2)'+' end'
    392
    393       when a.xtype =58  then 'case when '+a.name+' is null then ''NULL'' else '+'''''''''+'+'convert(varchar(23),'+a.name +',121)'+ '+'''''''''+' end'
    394
    395       when a.xtype =52  then 'case when '+a.name+' is null then ''NULL'' else '+'convert(varchar(12),'+a.name +')'+' end'
    396
    397       when a.xtype =122 then 'case when '+a.name+' is null then ''NULL'' else '+'convert(varchar(22),'+a.name +')'+' end'
    398
    399       when a.xtype =48  then 'case when '+a.name+' is null then ''NULL'' else '+'convert(varchar(6),'+a.name +')'+' end'
    400
    401--     when a.xtype =165 then 'case when '+a.name+' is null then ''NULL'' else '+'convert(varchar('+convert(varchar(4),a.length*2+2)+'),'+a.name +')'+' end'
    402
    403       when a.xtype =167 then 'case when '+a.name+' is null then ''NULL'' else '+'''''''''+'+'replace('+a.name+','''''''','''''''''''')' + '+'''''''''+' end'
    404
    405       else '''NULL'''
    406
    407       end as col,a.colid,a.name
    408
    409       from syscolumns a where a.id = object_id(@tablenameand a.xtype <>189 and a.xtype <>34 and a.xtype <>35 and  a.xtype <>36
    410
    411       )t order by colid
    412
    413       
    414
    415       select @sqlstr=@sqlstr+left(@sqlstr2,len(@sqlstr2)-1)+''+left(@sqlstr1,len(@sqlstr1)-3)+')'' from '+@tablename
    416
    417--  print @sqlstr
    418
    419       exec@sqlstr)
    420
    421       set nocount off
    422
    423end
    424
    425GO
  • 相关阅读:
    windows10 应用商店(Microsoft store)进不去
    Java中System函数
    人生的智慧叔本华
    第2关:文本串里单词、数字和符号的识别
    C/C++语言编写PL/0编译程序的词法分析程序
    编译原理实践
    vanced 无法登录问题
    @bizresubmit
    《道德经》全文(翻译 )
    道德经第十章
  • 原文地址:https://www.cnblogs.com/Dicky/p/176619.html
Copyright © 2020-2023  润新知