把一个表里的记录全部用insert打印出来

 /*

 来源找不到了.拿来后修改了ntext和text存放html中有'会出现错误的情况.

*/


CREATE       PROCEDURE   sp_findinsertinto 
@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=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,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  
      when   @xtype IN(35,99)   then    '''N''''''+'+'cast(replace(+CAST('+@name+' AS VARCHAR(MAX)),'''''''','''''''''''') as varchar(max))'+'+'''''''''   --nvarchar,nchar  
      else   @name   end  
      end 
   end       
 fetch   next   from   syscolumns_cursor   into    @name,@xtype  
end  

--select *from syscolumns where id=object_id('','')

close   syscolumns_cursor  
deallocate   syscolumns_cursor  
    
set   @sql='set   nocount   on   select    ''insert   '+@tablename+'('+@column+')   values (''as   ''--'','+ @columndata+','')''   from    '+@tablename  
    
print   '--'+cast(@sql    as varchar(max))
exec(@sql)  
    
if   @ident   is   not   null  
print   'SET   IDENTITY_INSERT   '+@TableName+'    OFF'

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值