欢迎光临
我们一直在努力

有用的SQL Server语句和存储过程-数据库专栏,SQL Server

建站超值云服务器,限时71元/月

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 

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » 有用的SQL Server语句和存储过程-数据库专栏,SQL Server
分享到: 更多 (0)

相关推荐

  • 暂无文章