如何把sql server表中数据导出sql脚本例如:
一个数据库MYDB 里面有3张表
UserInfo表
UserName Password   Tel   Sex
aaa        1111    333      1
xxx        3333     353     0
qqqq      333       33      1我的意思是:要把表里面的数据导出成为sql脚本语句....希望大家帮一下!!!

解决方案 »

  1.   

    我自己做了一个工具,可以把表中的数据导出成脚本,mail: [email protected]  QQ:653130761
      

  2.   

    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   OutputData   'myuser' 其中myUser中当前数据库中存在的表
      

  3.   

    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   'The   object   not   exists'     
      return     
      end     
      set   @objectname=rtrim(object_name(@objectId))     
        
      if   @objectname   is   null   or   charindex(@objectname,@tablename)=0   
    --此判不加密     
      begin     
      print   'object   not   in   current   database'     
      return     
      end     
        
      if   OBJECTPROPERTY(@objectId,'IsTable')   <   >   1   --   判斷對象是否table     
      begin     
      print   'The   object   is   not   table'     
      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'     
        
      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'     
        
      GO   
        
      exec  outputData   STORE DROP PROCEDURE  outputData