
--
======================================================


--
列出sql SERVER 所有表,字段名,主键,类型,长度,小数位数等信息


--
在查询分析器里运行即可,可以生成一个表,导出到EXCEL中


--
======================================================


SELECT


(
case
when
a.colorder
=
1
then
d.name
else
''
end
)表名,


a.colorder 字段序号,


a.name 字段名,


(
case
when
COLUMNPROPERTY
( a.id,a.name,
'
IsIdentity
'
)
=
1
then
'
√
'
else
''
end
) 标识,


(
case
when
(
SELECT
count
(
*
)


FROM
sysobjects


WHERE
(name
in


(
SELECT
name


FROM
sysindexes


WHERE
(id
=
a.id)
AND
(indid
in


(
SELECT
indid


FROM
sysindexkeys


WHERE
(id
=
a.id)
AND
(colid
in


(
SELECT
colid


FROM
syscolumns


WHERE
(id
=
a.id)
AND
(name
=
a.name)))))))
AND


(xtype
=
'
PK
'
))
>
0
then
'
√
'
else
''
end
) 主键,


b.name 类型,


a.length 占用字节数,


COLUMNPROPERTY
(a.id,
'
PRECISION
'
)
as
长度,


isnull
(
COLUMNPROPERTY
(a.id,
'
Scale
'
),
0
)
as
小数位数,


(
case
when
a.isnullable
=
1
then
'
√
'
else
''
end
) 允许空,


isnull
(e.
text
,
''
) 默认值,


isnull
(g.
[
value
]
,
''
)
AS
字段说明



FROM
syscolumns a
left
join
systypes b


on
a.xtype
=
b.xusertype


inner
join
sysobjects d


on
a.id
=
d.id
and
d.xtype
=
'
U
'
and
d.name
<>
'
dtproperties
'


left
join
syscomments e


on
a.cdefault
=
e.id


left
join
sysproperties g


on
a.id
=
g.id
AND
a.colid
=
g.smallid


order
by
a.id,a.colorder


--
-----------------------------------------------------------------------------------------------








列出sql SERVER 所有表、字段定义,类型,长度,一个值等信息


并导出到Excel 中


--
======================================================


--
Export all user tables deFinition and one sample value


--
jan-13-2003,Dr.Zhang


--
======================================================


在查询分析器里运行:


SET
ANSI_NULLS
OFF


GO


SET
NOCOUNT
ON


GO



SET
LANGUAGE
'
Simplified Chinese
'


go


DECLARE
@tbl
nvarchar
(
200
),
@fld
nvarchar
(
200
),
@sql
nvarchar
(
4000
),
@maxlen
int
,
@sample
nvarchar
(
40
)



SELECT
d.name TableName,a.name FieldName,b.name TypeName,a.length Length,a.isnullable IS_NULL
INTO
#t


FROM
syscolumns a, systypes b,sysobjects d


WHERE
a.xtype
=
b.xusertype
and
a.id
=
d.id
and
d.xtype
=
'
U
'



DECLARE
read_cursor
CURSOR


FOR
SELECT
TableName,FieldName
FROM
#t



SELECT
TOP
1
'
_TableName
'
TableName,


'
FieldName
'
FieldName,
'
TypeName
'
TypeName,


'
Length
'
Length,
'
IS_NULL
'
IS_NULL,


'
MaxLenUsed
'
AS
MaxLenUsed,
'
Sample Value
'
Sample,


'
Comment
'
Comment
INTO
#tc
FROM
#t



OPEN
read_cursor



FETCH
NEXT
FROM
read_cursor
INTO
@tbl
,
@fld


WHILE
(
@@fetch_status
<>
-
1
)
--
- failes


BEGIN


IF
(
@@fetch_status
<>
-
2
)
--
Missing


BEGIN


SET
@sql
=
N
'
SET @maxlen=(SELECT max(len(cast(
'
+
@fld
+
'
as nvarchar))) FROM
'
+
@tbl
+
'
)
'


--
PRINT @sql


EXEC
SP_EXECUTEsql
@sql
,N
'
@maxlen int OUTPUT
'
,
@maxlen
OUTPUT


--
print @maxlen


SET
@sql
=
N
'
SET @sample=(SELECT TOP 1 cast(
'
+
@fld
+
'
as nvarchar) FROM
'
+
@tbl
+
'
WHERE len(cast(
'
+
@fld
+
'
as nvarchar))=
'
+
convert
(
nvarchar
(
5
),
@maxlen
)
+
'
)
'


EXEC
SP_EXECUTEsql
@sql
,N
'
@sample varchar(30) OUTPUT
'
,
@sample
OUTPUT


--
for quickly


--
SET @sql=N'SET @sample=convert(varchar(20),(SELECT TOP 1 '+@fld+' FROM '+


--
@tbl+' order by 1 desc ))'


PRINT
@sql


print
@sample


print
@tbl


EXEC
SP_EXECUTEsql
@sql
,N
'
@sample nvarchar(30) OUTPUT
'
,
@sample
OUTPUT


INSERT
INTO
#tc
SELECT
*
,
ltrim
(
ISNULL
(
@maxlen
,
0
))
as
MaxLenUsed,


convert
(
nchar
(
20
),
ltrim
(
ISNULL
(
@sample
,
'
'
)))
as
Sample,
'
'
Comment
FROM
#t
where
TableName
=
@tbl
and
FieldName
=
@fld


END


FETCH
NEXT
FROM
read_cursor
INTO
@tbl
,
@fld


END



CLOSE
read_cursor


DEALLOCATE
read_cursor


GO



SET
ANSI_NULLS
ON


GO


SET
NOCOUNT
OFF


GO


select
count
(
*
)
from
#t


DROP
TABLE
#t


GO



select
count
(
*
)
-
1
from
#tc



select
*
into
##tx
from
#tc
order
by
tablename


DROP
TABLE
#tc



--
select * from ##tx



declare
@db
nvarchar
(
60
),
@sql
nvarchar
(
3000
)


set
@db
=
db_name
()


--
请修改用户名和口令 导出到Excel 中


set
@sql
=
'
exec master.dbo.xp_cmdshell
''
bcp ..dbo.##tx out c:
'
+
@db
+
'
_exp.xls -w -C936 -Usa -Psa
'''


print
@sql


exec
(
@sql
)


GO


DROP
TABLE
##tx


GO





--
======================================================


--
根据表中数据生成insert语句的存储过程


--
建立存储过程,执行 spGenInsertsql 表名


--
感谢playyuer


--
======================================================


CREATE
proc
spGenInsertsql (
@tablename
varchar
(
256
))



as


begin


declare
@sql
varchar
(
8000
)


declare
@sqlValues
varchar
(
8000
)


set
@sql
=
'
(
'


set
@sqlValues
=
'
values (
''
+
'


select
@sqlValues
=
@sqlValues
+
cols
+
'
+
''
,
''
+
'
,
@sql
=
@sql
+
'
[
'
+
name
+
'
],
'


from


(
select
case


when
xtype
in
(
48
,
52
,
56
,
59
,
60
,
62
,
104
,
106
,
108
,
122
,
127
)


then
'
case when
'
+
name
+
'
is null then
''
NULL
''
else
'
+
'
cast(
'
+
name
+
'
as varchar)
'
+
'
end
'


when
xtype
in
(
58
,
61
)


then
'
case when
'
+
name
+
'
is null then
''
NULL
''
else
'
+
'''''''''
+
'
+
'
cast(
'
+
name
+
'
as varchar)
'
+
'
+
'''''''''
+
'
end
'


when
xtype
in
(
167
)


then
'
case when
'
+
name
+
'
is null then
''
NULL
''
else
'
+
'''''''''
+
'
+
'
replace(
'
+
name
+
'
,
''''''''
,
''''''''''''
)
'
+
'
+
'''''''''
+
'
end
'


when
xtype
in
(
231
)


then
'
case when
'
+
name
+
'
is null then
''
NULL
''
else
'
+
'''
N
''''''
+
'
+
'
replace(
'
+
name
+
'
,
''''''''''''
)
'
+
'
+
'''''''''
+
'
end
'


when
xtype
in
(
175
)


then
'
case when
'
+
name
+
'
is null then
''
NULL
''
else
'
+
'''''''''
+
'
+
'
cast(replace(
'
+
name
+
'
,
''''''''''''
) as Char(
'
+
cast
(length
as
varchar
)
+
'
))+
'''''''''
+
'
end
'


when
xtype
in
(
239
)


then
'
case when
'
+
name
+
'
is null then
''
NULL
''
else
'
+
'''
N
''''''
+
'
+
'
cast(replace(
'
+
name
+
'
,
''''''''''''
) as Char(
'
+
cast
(length
as
varchar
)
+
'
))+
'''''''''
+
'
end
'


else
'''
NULL
'''


end
as
Cols,name


from
syscolumns


where
id
=
object_id
(
@tablename
)


) T


set
@sql
=
'
select
''
INSERT INTO [
'
+
@tablename
+
'
]
'
+
left
(
@sql
,
len
(
@sql
)
-
1
)
+
'
)
'
+
left
(
@sqlValues
,
len
(
@sqlValues
)
-
4
)
+
'
)
''
from
'
+
@tablename


--
print @sql


exec
(
@sql
)


end



GO





--
======================================================


--
根据表中数据生成insert语句的存储过程


--
建立存储过程,执行 proc_insert 表名


--
感谢Sky_blue


--
======================================================



CREATE
proc
proc_insert (
@tablename
varchar
(
256
))


as


begin


set
nocount
on


declare
@sqlstr
varchar
(
4000
)


declare
@sqlstr1
varchar
(
4000
)


declare
@sqlstr2
varchar
(
4000
)


select
@sqlstr
=
'
select
''
insert
'
+
@tablename


select
@sqlstr1
=
''


select
@sqlstr2
=
'
(
'


select
@sqlstr1
=
'
values (
''
+
'


select
@sqlstr1
=
@sqlstr1
+
col
+
'
+
''
,
''
+
'
,
@sqlstr2
=
@sqlstr2
+
name
+
'
,
'
from
(
select
case


--
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'


when
a.xtype
=
104
then
'
case when
'
+
a.name
+
'
is null then
''
NULL
''
else
'
+
'
convert(varchar(1),
'
+
a.name
+
'
)
'
+
'
end
'


when
a.xtype
=
175
then
'
case when
'
+
a.name
+
'
is null then
''
NULL
''
else
'
+
'''''''''
+
'
+
'
replace(
'
+
a.name
+
'
,
''''''''''''
)
'
+
'
+
'''''''''
+
'
end
'


when
a.xtype
=
61
then
'
case when
'
+
a.name
+
'
is null then
''
NULL
''
else
'
+
'''''''''
+
'
+
'
convert(varchar(23),
'
+
a.name
+
'
,121)
'
+
'
+
'''''''''
+
'
end
'


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
'


when
a.xtype
=
62
then
'
case when
'
+
a.name
+
'
is null then
''
NULL
''
else
'
+
'
convert(varchar(23),2)
'
+
'
end
'


when
a.xtype
=
56
then
'
case when
'
+
a.name
+
'
is null then
''
NULL
''
else
'
+
'
convert(varchar(11),
'
+
a.name
+
'
)
'
+
'
end
'


when
a.xtype
=
60
then
'
case when
'
+
a.name
+
'
is null then
''
NULL
''
else
'
+
'
convert(varchar(22),
'
+
a.name
+
'
)
'
+
'
end
'


when
a.xtype
=
239
then
'
case when
'
+
a.name
+
'
is null then
''
NULL
''
else
'
+
'''''''''
+
'
+
'
replace(
'
+
a.name
+
'
,
''''''''''''
)
'
+
'
+
'''''''''
+
'
end
'


when
a.xtype
=
108
then
'
case when
'
+
a.name
+
'
is null then
''
NULL
''
else
'
+
'
convert(varchar(
'
+
convert
(
varchar
(
4
),
'
+
a.name
+
'
)
'
+
'
end
'


when
a.xtype
=
231
then
'
case when
'
+
a.name
+
'
is null then
''
NULL
''
else
'
+
'''''''''
+
'
+
'
replace(
'
+
a.name
+
'
,
''''''''''''
)
'
+
'
+
'''''''''
+
'
end
'


when
a.xtype
=
59
then
'
case when
'
+
a.name
+
'
is null then
''
NULL
''
else
'
+
'
convert(varchar(23),2)
'
+
'
end
'


when
a.xtype
=
58
then
'
case when
'
+
a.name
+
'
is null then
''
NULL
''
else
'
+
'''''''''
+
'
+
'
convert(varchar(23),121)
'
+
'
+
'''''''''
+
'
end
'


when
a.xtype
=
52
then
'
case when
'
+
a.name
+
'
is null then
''
NULL
''
else
'
+
'
convert(varchar(12),
'
+
a.name
+
'
)
'
+
'
end
'


when
a.xtype
=
122
then
'
case when
'
+
a.name
+
'
is null then
''
NULL
''
else
'
+
'
convert(varchar(22),
'
+
a.name
+
'
)
'
+
'
end
'


when
a.xtype
=
48
then
'
case when
'
+
a.name
+
'
is null then
''
NULL
''
else
'
+
'
convert(varchar(6),
'
+
a.name
+
'
)
'
+
'
end
'


--
when a.xtype =165 then 'case when '+a.name+' is null then ''NULL'' else '+'convert(varchar('+convert(varchar(4),'+a.name +')'+' end'


when
a.xtype
=
167
then
'
case when
'
+
a.name
+
'
is null then
''
NULL
''
else
'
+
'''''''''
+
'
+
'
replace(
'
+
a.name
+
'
,
''''''''''''
)
'
+
'
+
'''''''''
+
'
end
'


else
'''
NULL
'''


end
as
col,a.colid,a.name


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


)t
order
by
colid




select
@sqlstr
=
@sqlstr
+
left
(
@sqlstr2
,
len
(
@sqlstr2
)
-
1
)
+
'
)
'
+
left
(
@sqlstr1
,
len
(
@sqlstr1
)
-
3
)
+
'
)
''
from
'
+
@tablename


--
print @sqlstr


exec
(
@sqlstr
)


set
nocount
off


end


GO

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。