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
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425