sql 存储过程生成sql 插入语句

在查询分析器以“文本显示结果”方法执行 
exec  UspOutputData  你的表名 
得到导出数据的语句,但image,text,ntext,sql_variant  列不出现在语句,以后改进。 
 
存储过程UspOutputData如下: 
 
CREATE      PROCEDURE  dbo.UspOutputData 
           @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  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值