免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 155828 | 回复: 12
打印 上一主题 下一主题

找一段生成insert语句的代码 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2002-09-04 16:38 |只看该作者 |倒序浏览
我记得好像在这里见过一段从现有表数据生成insert语句的过程,不知哪位有,麻烦再贴一次。

论坛徽章:
0
2 [报告]
发表于 2002-09-04 18:10 |只看该作者
如果說有人貼過,那肯定就是我啦.哈哈.
你不是csdn上的duckcn嗎?
你可認識我嗎?

论坛徽章:
0
3 [报告]
发表于 2002-09-05 08:03 |只看该作者
当然认识您老啦。可否再贴一次呀。

论坛徽章:
0
4 [报告]
发表于 2002-09-05 08:45 |只看该作者
兄弟我也期待中。。。。
其实最简单的做法是,直接在select句子中把 insert 什么加上去。。。

论坛徽章:
0
5 [报告]
发表于 2002-09-05 09:03 |只看该作者
duckcn:
呵呵,你如果知道IronPromises=zhuzhichao,那麼就不會要我再貼一次了.  
希望能保守這個秘密好嗎?csdn上只有海闊天空,一劍飄香,藍色力量,按鈕工廠這麼幾個人知道.

论坛徽章:
0
6 [报告]
发表于 2002-09-05 09:04 |只看该作者
lsh66:

在查询分析器以“文本显示结果”方法执行  
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,9  --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

论坛徽章:
0
7 [报告]
发表于 2002-09-08 22:09 |只看该作者
厉害,佩服版主。。。
你用通用的方法使用system table解决问题,这我也想到了,可是懒得去写一个通用的sp来解决。情愿每回写 select “insert。。。” 呵呵
谢了。。。保存下来

论坛徽章:
0
8 [报告]
发表于 2003-12-10 16:55 |只看该作者
有没有什么现成的工具,支持Oracle的工具PLSQL Developer, TOAD之类的就有此功能,就是不知道MS SQL Server有什么好的工具

论坛徽章:
0
9 [报告]
发表于 2003-12-10 19:10 |只看该作者
zhuzhichao兄結婚有兩年了,不知有小孩沒?

论坛徽章:
0
10 [报告]
发表于 2003-12-10 20:34 |只看该作者
最初由 xzh2000 发布
[B]zhuzhichao兄結婚有兩年了,不知有小孩沒? [/B]


好象最近消失了?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP