在SQL Server 查询分析器中调试复杂的SQL语句(30分)

  • 主题发起人 主题发起人 YFeral
  • 开始时间 开始时间
to fireworld:
我还是第一次发现SQL语句有这功能,不过这种用法只能提取结果集中的第一条记录,
难道在游标中使用变量传递信息就不行吗?不要说我太不开窍,我是说如果循环的层数在
多一层的话我的想法应该有用。
好了,分太少了问的东西有点多。只好再开帖子啦。
 
/*声名用于添加记录的变量*/
DECLARE @YNum Integer
DECLARE @YMoney Numeric(18, 2)
DECLARE @YP_Bh VarChar(10)
DECLARE @YP_PDH VarChar(20)
DEClARE @YP_Class Char (1)
DECLARE @YP_Name VarChar(60)
DECLARE @YP_Size VarChar(20)
DECLARE @YP_Unit VarChar(20)
DECLARE @YP_JX VarChar(8)
DECLARE @YP_JFDJ money
DECLARE @YP_JFSL integer
DECLARE @YP_JFJE Numeric(18, 2)
DECLARE @YP_KFBH Char(3)
DECLARE @YP_KFName VarChar(16)

/*得到要添加的所有旧药品的流水帐*/
DECLARE AppendSource_cursor SCROLL CURSOR FOR
SELECT YP_BH, YP_RPDH AS YP_PDH, YP_Name, YP_Size, YP_Unit,
YP_JX, YP_PFJ AS YP_JFDJ, YP_RSL AS YP_JFSL, YP_RJE AS YP_JFJE
FROM YP_YKIn
WHERE (YP_RPDH IN('XRK11_010012')) AND (YP_BH IN(SELECT YP_BH FROM YP_DrugDict))
GROUP BY YP_BH, YP_RPDH, YP_Name, YP_Size, YP_Unit, YP_JX, YP_PFJ,YP_RSL, YP_RJE
OPEN AppendSource_cursor

/*开始添加药品流水帐*/
WHILE @@FETCH_STATUS = 0
BEGIN
FETCH NEXT FROM AppendSource_cursor
INTO @YP_BH, @YP_PDH, @YP_Name, @YP_Size, @YP_Unit,@YP_JX, @YP_JFDJ, @YP_JFSL, @YP_JFJE
/*取出此药品的余金额,余数量*/
/*得到余金额、余数量,在每一次取药品的数量帐信息时打开一次*/
SELECT @YP_YSL=YP_YSL, @YP_YJE=YP_YJE FROM YP_YKList WHERE (YP_KFBH = '11') AND (YP_Class = '1') AND (YP_Bh = @YP_BH) ORDER BY JZ_XH

/*添加一个药品的数量帐信息*/
INSERT INTO YP_YKList (YP_KFBH, YP_KFName, YP_Class, YP_PDH,YP_BH,YP_Name, YP_Size, YP_Unit, YP_JX, YP_JFDJ, YP_JFSL,YP_JFJE, YP_YSL,YP_YJE)VALUES('11', '西药库', '1', @YP_PDH, @YP_BH, @YP_Name,@YP_Size, @YP_Unit, @YP_JX, @YP_JFDJ, @YP_JFSL, @YP_JFJE,@YP_JFSL + @YNum, @YP_JFJE + @YMoney)
END

CLOSE AppendSource_cursor
DEALLOCATE AppendSource_cursor
 
多人接受答案了。
 
可以,那你得把游标的定义写在循环里面,并且也要注意释放,不过告诉你一点,需要这样写的数据库一定很不规范的
 
to fireworld 多谢。
 
后退
顶部