求教基于选择接口的有条件性地插入的方法

jianglinchun 2004-11-29 09:42:30
我现在遇到一下一个技术难题,简单描述如下:

tableA

ID Name Category
1 xxx 3
2 xxx 4
3 xxx 5

select ID,Name,Category from tableA where Category in(3,4,5)

tableB
ID AID data

我现在需要选择出tableA中符合条件的一条或者多条数据,并且遍历每一行记录,根据Category进行判断,然后向tableB中插入对应的数据

比如 Category = 3 时,data字段就插入aaaaaaaaaa
Category = 4时,data字段就插入bbbbbbbbbb
依次类推.

不知道这样的操作是否存在可行性,小弟才疏学浅,用游标查出了每行记录,但是游标前进检索的时候,不知道如何进行操作.不知到我用快速只进游标的办法是否正确.

或者您有更好的思路?

所以在此向各位大侠求教最优的方案了。
...全文
129 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
jianglinchun 2004-11-29
  • 打赏
  • 举报
回复
特别感谢yjzhg(执著)。:D
jianglinchun 2004-11-29
  • 打赏
  • 举报
回复
呵呵,谢谢邹建。谢谢“胖熊”。就此结贴,给分。
zjcxc 元老 2004-11-29
  • 打赏
  • 举报
回复
你原来定义的是nvarchar,没有指定长度,则它的长度是1,所以只插入了3,4,5,后面被截断了.
zjcxc 元老 2004-11-29
  • 打赏
  • 举报
回复
declare @data3 nvarchar(100)
declare @data4 nvarchar(100)
declare @data5 nvarchar(100)
set @data3='3类分销商的应得的数据'
set @data4='4类分销商的应得的数据'
set @data5='5类分销商的应得的数据'
declare @rid int
insert into ReportPublish (Name,ExtensionTempleteID,PublisherID,PublishTime)
values ('测试报表发布功能',3,'sysadmin','2004-11-29')
set @rid=@@Identity

insert into ReportSubmit(PublishID,ChannelID,Data)
select @rid,ID,case CategoryID
when 3 then @data3
when 4 then @data4
when 5 then @data5
end
from Channel where CategoryID in(3,4,5)

select * from ReportSubmit
lionlong 2004-11-29
  • 打赏
  • 举报
回复
先顶一下
jianglinchun 2004-11-29
  • 打赏
  • 举报
回复
不过又发现一个问题。

declare @data3 nvarchar
declare @data4 nvarchar
declare @data5 nvarchar
set @data3='3类分销商的应得的数据'
set @data4='4类分销商的应得的数据'
set @data5='5类分销商的应得的数据'
declare @rid int
insert into ReportPublish (Name,ExtensionTempleteID,PublisherID,PublishTime) values ('测试报表发布功能',3,'sysadmin','2004-11-29')
set @rid=@@Identity

insert into ReportSubmit(PublishID,ChannelID,Data)
select @rid,ID,case CategoryID
when 3 then @data3
when 4 then @data4
when 5 then @data5
end
from Channel where CategoryID in(3,4,5)

select * from ReportSubmit

这样没有插入预期值,即是:
data列应该插入@data3,@data4,@data5对应的值,但是确插入了3,4,5,与预期不符合。

但是与上面的sql只是参数定义上的差别。请各位大侠继续帮忙看看。
jianglinchun 2004-11-29
  • 打赏
  • 举报
回复
谢谢大家,我已经搞定了。sql 如下:

declare @rid int
insert into ReportPublish (Name,ExtensionTempleteID,PublisherID,PublishTime) values ('测试报表发布功能',3,'sysadmin','2004-11-29')
set @rid=@@Identity

insert into ReportSubmit(PublishID,ChannelID,Data)
select @rid,ID,case CategoryID
when 3 then '3类分销商的应得的数据'
when 4 then '4类分销商的应得的数据'
when 5 then '5类分销商的应得的数据'
end
from Channel where CategoryID in(3,4,5)

select * from ReportSubmit
jianglinchun 2004-11-29
  • 打赏
  • 举报
回复
谢谢zjcxc(邹建)。

这个值没有生成规则,为预先定义并且付值得参数。如
3--@Data3
4--@Data4
5--@Data5
zjcxc 元老 2004-11-29
  • 打赏
  • 举报
回复
根据不同情况插入不同的值

这个值从那里来? 有什么生成规则?
jianglinchun 2004-11-29
  • 打赏
  • 举报
回复
不好意思,我的意思没有讲得很明白。

tableB
ID AID data

ID--Identity
AID--与tableA的ID对应
data--表示插入的值

比如 Category = 3 时,data字段就插入aaaaaaaaaa
Category = 4时,data字段就插入bbbbbbbbbb

——这里意思是根据不同情况插入不同的值,不一定是a或者b之类的。

先谢谢大家了。我先试试大家的方法。:D
lzymagi 2004-11-29
  • 打赏
  • 举报
回复
同意回复人: chd2001(天蝎降临) ( ) 信誉:100 的话。何况还有ID,AID呢?全为null?
yjzhg 2004-11-29
  • 打赏
  • 举报
回复
insert into tableb(data) select case when category = 3 then 'aaaaaa' when category = 4 then 'bbbbbb' end from tableA
chd2001 2004-11-29
  • 打赏
  • 举报
回复
3--aaaaaaaa 4--bbbbbbb
总有个规律的把,不然记录多了不可能全手动规定拉?
zjcxc 元老 2004-11-29
  • 打赏
  • 举报
回复
insert tableB(AID,data) select ID,replicate(char(Category+3),7) from tableA where Category in(3,4,5)
yjzhg 2004-11-29
  • 打赏
  • 举报
回复
insert into tableb(data) select case when category = 3 then 'aaaaaa' when category = 4 then 'bbbbbb' end
lzymagi 2004-11-29
  • 打赏
  • 举报
回复
说得不够明白。

最好说清楚点

34,591

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧