首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 这个存储过程如何写?循环插入 [已结贴,结贴人:ahongzhu]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • ahongzhu
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    • 揭帖率:
    发表于:2008-04-23 17:43:27 楼主
    假设有一表(表名table1)
    字段有三个(f1,f2,f3)

    我想通过一个存储过程实现这样的功能:
    三个参数a,b,c
    其中a='10,11,12...'
      b='a,b...'
      c='9'

    (a、b参数值的个数不一定一样)
    怎样写这个存储过程,把这些值高效的插入到table1的f1,f2,f3,使结果如下:
    f1              f2                f3
    -------        ----------        ------------
    10              a                  9
    10              b                  9
    11              a                  9
    11              b                  9
    12              a                  9
    12              b                  9
    ...

    谢谢!
    20  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • happyflystone
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    • 4

      5

    发表于:2008-04-23 17:49:231楼 得分:15
    SQL code
    declare @a varchar(8000),@b varchar(8000),@c varchar(8000) set @a ='10,11,12' set @b='a,b' set @c='9' set @a = 'select '''+replace(@a,',',''' as col union select ''')+''' as col' set @b = 'select '''+replace(@b,',',''' as col union select ''')+''' as col' set @c = 'select '''+replace(@c,',',''' as col union select ''')+''' as col' exec('select a.col,b.col,c.col from ('+@a+') a full join ('+@b+') b on 1 =1 full join ('+@c+') c on 1= 1') /* col col col ---- ---- ---- 10 a 9 11 a 9 12 a 9 10 b 9 11 b 9 12 b 9 */
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • fa_ge
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-04-23 17:56:122楼 得分:5
    把a,b,c这三个参数化为三个临时表,然后笛卡儿积
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • cson_cson
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-04-23 18:08:243楼 得分:0
    SQL code
    create table tb(f1 varchar(10),f2 varchar(10),f3 varchar(10)) go create proc pinsert(@a varchar(30),@b varchar(30),@c varchar(30)) as begin declare @s varchar(8000) create table #a(id varchar(10)) create table #b(id varchar(10)) create table #c(id varchar(10)) set @s = stuff(replace(','+@a,',',''' insert #a select '''),1,1,'')+'''' + stuff(replace(','+@b,',',''' insert #b select '''),1,1,'')+'''' + stuff(replace(','+@c,',',''' insert #c select '''),1,1,'')+'''' exec(@s) insert tb select * from #a,#b,#c end go exec pinsert '1,2,3','a,b','9' select * from tb go drop table tb go drop proc pinsert /* f1 f2 f3 ---------- ---------- ---------- 1 a 9 2 a 9 3 a 9 1 b 9 2 b 9 3 b 9 */
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved