sql server语句和存储过程
— ======================================================
–列出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,a.name,precision) as 长度,
isnull(columnproperty(a.id,a.name,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=nset @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=nset @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=nset @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),+a.name +,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.xprec+2)+),+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),+a.name +,2)+ end
when a.xtype =58 then case when +a.name+ is null then null else +++convert(varchar(23),+a.name +,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.length*2+2)+),+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
说明:本贴纯属收藏,轉自李洪根的blog
