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

  1 --  ======================================================
  2
  3 -- 列出SQL SERVER 所有表,字段名,主键,类型,长度,小数位数等信息
  4
  5 -- 在查询分析器里运行即可,可以生成一个表,导出到EXCEL中
  6
  7 --  ======================================================
  8
  9 Select  
 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 ' ), 0 As  小数位数,
 52
 53        ( Case   When  A.Isnullable = 1   Then   ' ' Else   ''   End ) 允许空,
 54
 55         Isnull (E. Text , '' ) 默认值,
 56
 57         Isnull (G. [ Value ] , '' As  字段说明    
 58
 59 From   Syscolumns  A  Left   Join  Systypes B 
 60
 61 On   A.Xtype = B.Xusertype
 62
 63 Inner   Join  Sysobjects D 
 64
 65 On  A.Id = D.Id   And   D.Xtype = ' U '   And   D.Name <> ' Dtproperties '
 66
 67 Left   Join  Syscomments E
 68
 69 On  A.Cdefault = E.Id
 70
 71 Left   Join  Sysproperties G
 72
 73 On  A.Id = G.Id  And  A.Colid  =  G.Smallid  
 74
 75 Order   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
 91 SET  ANSI_NULLS  OFF  
 92
 93 GO
 94
 95 SET  NOCOUNT  ON
 96
 97 GO
 98
 99  
100
101 SET  LANGUAGE  ' Simplified Chinese '
102
103 go
104
105 DECLARE   @tbl   nvarchar ( 200 ), @fld   nvarchar ( 200 ), @sql   nvarchar ( 4000 ), @maxlen   int , @sample   nvarchar ( 40 )
106
107  
108
109 SELECT  d.name TableName,a.name FieldName,b.name TypeName,a.length Length,a.isnullable IS_NULL  INTO  #t
110
111 FROM   syscolumns  a,  systypes b,sysobjects d  
112
113 WHERE   a.xtype = b.xusertype   and   a.id = d.id   and   d.xtype = ' U '  
114
115  
116
117 DECLARE  read_cursor  CURSOR
118
119 FOR   SELECT  TableName,FieldName  FROM  #t
120
121  
122
123 SELECT   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
135 OPEN  read_cursor
136
137  
138
139 FETCH   NEXT   FROM  read_cursor  INTO   @tbl , @fld
140
141 WHILE  ( @@fetch_status   <>   - 1 )   -- - failes
142
143 BEGIN
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
183 END
184
185  
186
187 CLOSE  read_cursor
188
189 DEALLOCATE  read_cursor
190
191 GO
192
193  
194
195 SET  ANSI_NULLS  ON
196
197 GO
198
199 SET  NOCOUNT  OFF
200
201 GO
202
203 select   count ( * )   from  #t
204
205 DROP   TABLE  #t
206
207 GO
208
209  
210
211 select   count ( * ) - 1    from  #tc
212
213  
214
215 select   *   into  ##tx  from  #tc  order   by  tablename
216
217 DROP   TABLE  #tc
218
219  
220
221 -- select * from ##tx
222
223  
224
225 declare   @db   nvarchar ( 60 ), @sql   nvarchar ( 3000 )
226
227 set   @db = db_name ()
228
229 -- 请修改用户名和口令 导出到Excel 中
230
231 set   @sql = ' exec master.dbo.xp_cmdshell  '' bcp ..dbo.##tx out c:/ ' + @db + ' _exp.xls -w -C936 -Usa -Psa  '''
232
233 print   @sql
234
235 exec ( @sql )
236
237 GO
238
239 DROP   TABLE  ##tx
240
241 GO
242
243  
244
245  
246
247  
248
249 --  ======================================================
250
251 -- 根据表中数据生成insert语句的存储过程
252
253 -- 建立存储过程,执行 spGenInsertSQL 表名
254
255 -- 感谢playyuer
256
257 --  ======================================================
258
259 CREATE     proc  spGenInsertSQL ( @tablename   varchar ( 256 ))
260
261  
262
263 as
264
265 begin
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
321 end
322
323  
324
325 GO
326
327  
328
329  
330
331  
332
333 --  ======================================================
334
335 -- 根据表中数据生成insert语句的存储过程
336
337 -- 建立存储过程,执行 proc_insert 表名
338
339 -- 感谢Sky_blue
340
341 --  ======================================================
342
343  
344
345 CREATE   proc  proc_insert ( @tablename   varchar ( 256 ))
346
347 as
348
349 begin
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 ( @tablename and  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
423 end
424
425 GO
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值