求在SQL里寫存儲過程將一個表的內容按條件倒入另一個表!(10分)

  • 主题发起人 主题发起人
  • 开始时间 开始时间

Unregistered / Unconfirmed
GUEST, unregistred user!
求在SQL里寫存儲過程將一個表的內容按條件倒入另一個表!在這里有兩次嵌套循環,因為條件的限制,所以要在while 里再來一個while ,另外,求有方面經驗的朋友指點一二!
我的代碼如下:

CREATE PROCEDURE pGetStore
@ycode nvarchar(20) --接收參數,方便查詢某一產品的庫存
AS
declare @levCount integer
declare @oveCount integer
declare @sublevcount integer
declare @subovecount integer
begin
set nocount on
select @levcount=1
select @sublevcount=1
declare @yinqty numeric(9,2)
declare @youtqty numeric(9,2)
declare @ymethod nvarchar(6)
declare @pqty numeric(9,2)

declare @subitem table
(
sn integer identity,
subycode nvarchar(20),
Countrecord integer
)

declare @inittmp table --定義一臨時表,取得期初數,進,出,數
(
sn integer identity,
idx integer,
ymethod nvarchar(6),
ycode nvarchar(20),
yinqty numeric(9,2) not null default 0.00,
yindate datetime,
yinno nvarchar(20),
youtqty numeric(9,2) not null default 0.00,
youtdate datetime,
youtno nvarchar(20),
ystoreqty numeric(9,2) not null default 0.00,
ypublicdate datetime
)
declare @analyzertmp table --定義一臨時表,進行進出數的分析
(
idx integer,
ymethod nvarchar(6),
ycode nvarchar(20),
yinqty numeric(9,2) not null default 0.00,
yindate datetime,
yinno nvarchar(20),
youtqty numeric(9,2) not null default 0.00,
youtdate datetime,
youtno nvarchar(20),
yrstoreqty numeric(9,2) not null default 0.00,
ypublicdate datetime
)
insert into @inittmp(ymethod,ycode,yinqty,yindate,yinno,ypublicdate) --在此處先插入期初數
select 'IN' as ymethod,a.ycode,a.yqty as yinqty,a.ydate as yindate,'INITQTY' as yinno,a.ydate as ypublicdate from yinitprocduce a where a.yqty>0 order by a.ycode
insert into @inittmp --在此處倒入庫存數
select idx,ymethod=
case
when a.yinno is null then 'OUT'
when a.youtno is null then 'IN'
end,
a.ycode,a.yinqty,a.yindate,a.yinno,a.youtqty,a.youtdate,a.youtno,convert(numeric(9,2),0.00) as ystoreqty,ypublicdate=
case
when a.yindate is null then a.youtdate --增加一個公共的日期,當以日期的前後來排序,提供出,或進的序數
when a.youtdate is null then a.yindate
end
from yidms_store a order by a.ycode

insert into @subitem(subycode,Countrecord) select ycode,count(ycode) as Countrecord from @inittmp group by ycode order by ycode --只找現單一的產品
select @subovecount=count(*) from @subitem
while (select count(*) from @subitem)>0
begin
if (@sublevcount>@subovecount)
begin
goto out
end

在此這里還要一次的while ,代碼還沒有寫完想看看大家結此有什么看法?




end
out:


set nocount off
end

out:

select * from @subitem order by subycode
GO
 
你把你的要求说明白一点,"求在SQL里寫存儲過程將一個表的內容按條件倒入另一個表"这个问题很容易解决呀!

至于你说的要两个while又想干嘛呢?
事实上写这么多代码出来,人家也没太多的时间看呀.
 
insert into xx1.db select * from xx2.db where...
但XX1,XX2的表结构应该一样。
 
首先,我在一個表里有很多個item的的進出情況,我要先把item group by 出來,這樣只剩下單一的item,
二:把這個單一的item循環,要每一條記錄的處理,
三:在循環每一條時又要在這個表里選出所有同這個item相同的記錄,因為里面包括有進,出,所以又只能循環處理,進作進,出作出,然后再有條有理的倒入另一個表中,這樣,別人是不是看到了一個物料的進銷存表?

所以在這里就有一個循環嵌套!
在存儲過程里怎么實現呢?
 
写游标呀,或者写函数呀.

看function的帮助,它有个很好的循环的例子.
因游标效率太低.还用函数的好
 
在這里可能只能用到游標,如果用到函數,那用什么函數呢?
 
当然是自己写的函数啦
 
接受答案了.
 
后退
顶部