把一个表数据连同其他数据插入另一个表中

simon505 2008-11-29 04:50:56
rq = em_text
ts = 16
insert into kqjl(bh,xm,bm1,bm2,bm3,zglx,bm,rq,k01)
(select bh,xm,bm1,bm2,bm3,zglx,bm1 + '/' + bm2 + '/' + bm3 as bm,rq,ts
from ygml);
我想把从掩码框取得的日期与ts连同上面的语句一同插入表中
bm1 + '/' + bm2 + '/' + bm3
当bm2或bm3是null时
bm1//或bm1bm2/

我想当bm值为空不插入?

...全文
231 点赞 收藏 29
写回复
29 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
simon505 2008-11-30
insert into kqjl(bh,xm,bm1,bm2,bm3,zglx,bm,rq,k01,k02)
加上一个k02
k02
是在我执行存储过程之前
从一个弹出窗口输入的数字

是否就同rq一样写法?
回复
liubocy 2008-11-30
rollback后加个return
回复
liubocy 2008-11-30

create proc p_test( @dt datetime, @ret int output ) as

declare @cnt int
select @cnt = count(*) from kqjl where datediff(m,rq,@dt) = 0
if @cnt > 0
begin
set @ret = 1
return
end

insert into kqjl(bh,xm,bm1,bm2,bm3,zglx,bm,rq,k01)
(select bh,xm,bm1,bm2,bm3,zglx,
((select rtrim(c.bmmc) from bm1 c where c.bm1 = a.bm1) + ( case when ( select rtrim(d.bmmcs) from bm2 d where d.bm2 = a.bm2 ) is null then '' else '/' + ( select rtrim(d.bmmcs) from bm2 d where d.bm2 = a.bm2 ) end ) + ( case when ( select rtrim(e.bmmcss) from bm3 e where e.bm3 = a.bm3 ) is null then '' else '/' + ( select rtrim(e.bmmcss) from bm3 e where e.bm3 = a.bm3 ) end ) ) as bm,
@dt,
CAST(DATEADD(MONTH,DATEDIFF(MONTH,0,getdate())+1,0)-DATEADD(MONTH,DATEDIFF(MONTH,0,getdate()),0)AS INT ) as ts
from ygml a)

set @ret = 0



//代码
datetime ldt_rq
int li_ret

em_1.getdata(ldt_rq)

DECLARE P1 PROCEDURE FOR P_test
@dt = :ldt_rq,
@ret = :li_ret OutPut
;
EXECUTE P1;
IF sqlca.sqlcode <> 0 THEN
Messagebox( '', '执行失败' )
RollBack;
ELSE
FETCH P1 INTO :li_ret ;
Commit;
END IF

if li_ret > 0 then
messagebox( '','本月记录已经存在' )
return
end if

//刷新dw

回复
simon505 2008-11-30
我加了100分
希望各位能够给点意见
或应该怎么改

代码在按钮下执行没有问题
回复
simon505 2008-11-30
string bh,bm1,bm2,bm3,zglx,bm
decimal k01,k02,k03,k04,k05,k06,k07,k08,k09,k10,k11,k12,bygx,byjy



date d_emrq,d_emrq1
date rq1
d_emrq = date(em_1.text)
select top 1 rq into:rq1 from kqjl where datediff(m,rq,:d_emrq)=0;
if sqlca.sqlnrows = 1 then
messagebox("系统提示","本月记录已经存在!")
//delete kqjl where rq >= :rq1;
elseif sqlca.sqlcode = 100 then
/////////////取得数据/////////////////
insert into kqjl(bh,xm,bm1,bm2,bm3,zglx,bm,rq,k01)
(select bh,xm,bm1,bm2,bm3,zglx,&
((select rtrim(c.bmmc) from bm1 c where c.bm1 = a.bm1) + ( case when ( select rtrim(d.bmmcs) from bm2 d where d.bm2 = a.bm2 ) is null then '' else '/' + ( select rtrim(d.bmmcs) from bm2 d where d.bm2 = a.bm2 ) end ) + ( case when ( select rtrim(e.bmmcss) from bm3 e where e.bm3 = a.bm3 ) is null then '' else '/' + ( select rtrim(e.bmmcss) from bm3 e where e.bm3 = a.bm3 ) end ) ) as bm,&
:d_emrq,&
CAST(DATEADD(MONTH,DATEDIFF(MONTH,0,getdate())+1,0)-&
DATEADD(MONTH,DATEDIFF(MONTH,0,getdate()),0)AS INT ) as ts
from ygml a);
////////////////////////////////////
//open(w_gxts)
////////////数据窗口按日期模糊检索///////////////
string ls_oldsql, ls_sql
datetime ldt_tmp
ls_oldsql = dw_1.getsqlselect()
ldt_tmp = datetime( date(string(d_emrq,'yyyy-mm-01')), time('00:00:00') )
ls_sql = " where rq = '" + string(ldt_tmp,'yyyy-mm-dd hh:mm:ss') + "'"

dw_1.SetSqlSelect(ls_OldSql + ls_Sql)

dw_1.retrieve(ls_sql)
dw_1.setsqlselect(ls_oldsql)
///////////////////////////
commit;
messagebox("系统提示","本月记录生成成功!")
elseif sqlca.sqlcode = - 1 then
messagebox("caption","Error!")
end if


我想把这句代码做成一个存储过程,使用的时候在调用执行
回复
liubocy 2008-11-30
c,d,e的mc类型改成varchar,或者在sql中用 ltrim(rtrim(c.mc))
回复
simon505 2008-11-30
我加了去空格的函数

还是去不掉呢
回复
simon505 2008-11-30
知道怎么去掉空格了
回复
simon505 2008-11-30
中间有空格?
如一 /二
回复
simon505 2008-11-30
为何会没有数据呢?
回复
simon505 2008-11-30
执行的时候在
dw里面也显示
关闭后就没有了

数据库也没有
回复
simon505 2008-11-30
用存储过程后
不产生数据

提示是有

回复
liubocy 2008-11-30
那就按你的想法去找问题
回复
simon505 2008-11-30
一直显示正在执行查询......
回复
simon505 2008-11-30
执行了这个存储过程后
我在查询管理器
想查询数据就不行了

是不是那里没有提交?
一直在占用??
回复
liubocy 2008-11-30
一样的,把k02当存储过程的参数传进去

create proc p_test( @dt datetime, @k02 varchar(30),@ret int output ) as


回复
liubocy 2008-11-29
declare @a table ( bm1 int, bm2 int, bm3 int )
declare @c table( bh1 int, mc varchar(10) )
declare @d table( bh2 int, mc varchar(10) )
declare @e table( bh3 int, mc varchar(10) )

insert @a select 1,2,3
insert @a select 1,2,null
insert @a select 1,null,null
insert @a select null,2,3

insert @c select 1, '一'
insert @d select 2, '二'
insert @e select 3, '三'

select bm1,bm2,bm3,( (select c.mc from @c c where c.bh1 = a.bm1) + ( case when ( select d.mc from @d d where d.bh2 = a.bm2 ) is null then '' else '/' + ( select d.mc from @d d where d.bh2 = a.bm2 ) end ) + ( case when ( select e.mc from @e e where e.bh3 = a.bm3 ) is null then '' else '/' + ( select e.mc from @e e where e.bh3 = a.bm3 ) end ) ) as bm from @a a


/*结果
bm1 bm2 bm3 bm
----------- ----------- ----------- --------------------------------
1 2 3 一/二/三
1 2 NULL 一/二
1 NULL NULL 一
NULL 2 3 NULL
*/

方法就这样 自己整理下
回复
simon505 2008-11-29
a,b,c,d,e 五个表
a表有字段bh,xm,bm1,bm2,bm3..................
b表有bh,xm,bm1,bm2,bm3,rq,k01-k12字段
c有bh1,mc
d有bh2,mc
e有bh3,mc

1、我想把a表数据(写出来那些)连同bm的合并、rq自己定义以及当月天数插入b表
2、bm合并的格式bm1/bm2/bm3,其中如果三个bm有为空值就不/,即bm1/bm2,而不是bm1/bm2/或bm1//
3、因为a表保存的bm1,bm2,bm3是值不是汉字,我想再插入过程中去汉字插入而不是数字

1我已做好
回复
青锋-SS 2008-11-29
表结构,要用什么做什么,说的详细些.
回复
liubocy 2008-11-29
啥意思,举个例子说明下。表达的清晰些
回复
加载更多回复
相关推荐
发帖
数据库相关
创建于2007-09-28

734

社区成员

PowerBuilder 数据库相关
申请成为版主
帖子事件
创建了帖子
2008-11-29 04:50
社区公告
暂无公告