网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > 数据库 > SQL技巧
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
数据库:数据库教程,数据库技巧,Oracle教程,MySQL教程,Sybase教程,Access教程,DB2教程,数据库安全,数据库文摘
本月文章推荐
.Sql数据库MDF数据文件数据库恢复.
.关于SQL server中字段值为null的.
.项目开发中层次结构存储的两种设.
.mssql锁基础教程.
.SQL Server 2008主要功能在兼容性.
.SQL Server的空值处理策略.
.怎样用SQL 2000 生成XML.
.一个有关SQL Server连接的问题.
.sql年月日计算方法.
.crosscheck长时间运行后未见结果.
.logmnr无法生成部分表的DML跟踪语.
.优化SQL Server索引的小技巧.
.修改SQL Server 2005 sa用户密码.
.创建一个表时表中列的顺序对性能.
.内嵌或嵌入SQL和存储过程之对比.
.SQL Server中使用DTS设计器进行数.
.优化数据库的方法及SQL语句优化的.
.SQL中获得EXEC后面的sql语句或返.
.Epictetus数据库管理工具推出0.3.
.存储过程中如何执行带输出参数的.

导出表数据脚本的存储过程

发表日期:2008-6-8


生成表数据脚本的存储过程
CREATE PROCEDURE   dbo.OutputData  
  @tablename   sysname      
  AS      
  declare   @column   varchar(1000)     
  declare   @columndata   varchar(1000)     
  declare   @sql   varchar(4000)     
  declare   @xtype   tinyint      
  declare   @name   sysname      
  declare   @objectId   int      
  declare   @objectname   sysname      
  declare   @ident   int      

  set   nocount   on      
  set   @objectId=object_id(@tablename)     
  if  @objectId   is   null   --   判断对象是否存在     
     begin      
      print  @tablename +  '对象不存在'     
      return      
    end     
  set @objectname=rtrim(object_name(@objectId))     
  if @objectname is null or charindex(@objectname,@tablename)=0
    begin      
      print  @tablename +  '对象不在当前数据库中'      
      return      
    end         
  if  OBJECTPROPERTY(@objectId,'IsTable')    <   >    1   --   判断对象是否是表     
    begin      
      print  @tablename +  '对象不是表'     
      return      
    end         
  select   @ident=status&0x80   from   syscolumns   where   id=@objectid   and   status&0x80=0x80          
  if @ident is   not   null      
    print   'SET   IDENTITY_INSERT   '+ @TableName + '   ON'     
  --定义游标,循环取数据并生成Insert语句
  declare  syscolumns_cursor  cursor for   
    select   c.name,c.xtype   from   syscolumns   c     
      where   c.id=@objectid     
      order   by   c.colid     
  --打开游标
  open   syscolumns_cursor     
  set  @column=''     
  set  @columndata=''     
  fetch   next   from   syscolumns_cursor   into   @name,@xtype     
  while   @@fetch_status    <>  -1     
    begin      
    if   @@fetch_status    <>  -2     
      begin      
      if   @xtype   not   in(189,34,35,99,98)   --timestamp不需处理,image,text,ntext,sql_variant 暂时不处理     
        begin      
        set   @column=@column + 
          case   when   len(@column)=0   then ''  
                 else   ','
                 end + @name     
        set   @columndata = @columndata + 
          case   when   len(@columndata)=0   then   ''   
                 else   ','','','
                 end  + 
          case   when  @xtype   in(167,175)  then   '''''''''+'+@name+'+'''''''''                --varchar,char     
                 when   @xtype   in(231,239)   then   '''N''''''+'+@name+'+'''''''''             --nvarchar,nchar     
                 when   @xtype=61   then   '''''''''+convert(char(23),'+@name+',121)+'''''''''   --datetime     
                 when   @xtype=58   then   '''''''''+convert(char(16),'+@name+',120)+'''''''''   --smalldatetime     
                  when   @xtype=36   then   '''''''''+convert(char(36),'+@name+')+'''''''''       --uniqueidentifier     
                 else   @name   
                 end      
        end      
      end      
    fetch   next   from   syscolumns_cursor   into   @name,@xtype     
    end      
  close   syscolumns_cursor     
  deallocate   syscolumns_cursor          
  set  @sql='set   nocount   on   select   ''insert   '+@tablename+'('+@column+')   values(''as   ''--'','+@columndata+','')''   from   '+@tablename         
  print   '--'+@sql     
  exec(@sql)          
  if   @ident   is   not   null      
  print  'SET   IDENTITY_INSERT   '+@TableName+'   OFF'     
 

 exec   OutputData2   '表名'

上一篇:数据仓库工程师面试过程中经常遇到的题目 人气:1196
下一篇:logmnr无法生成部分表的DML跟踪语句问题 人气:632
浏览全部存储过程的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐