日期:2014-05-18 浏览次数:20397 次
CREATE PROC P3 (@Acc_No VARCHAR(20), @Acc_Date DATETIME ) AS INSERT INTO T2(Acc_No,Acc_Date,Today_Money,Yesterday_Money) SELECT B.Acc_No,A.Acc_Date , (B.Today_Money+ISNULL(A.Mo,0)) As Today_Money,(B.Today_Money) AS yesterday_Money FROM (SELECT Acc_No, Acc_Date,SUM(In_Money-Out_Money) AS Mo FROM T1 WHERE Acc_Date >= DATEADD(DD,-1,@Acc_Date) AND Acc_Date<@Acc_Date and Acc_No=@Acc_No GROUP BY Acc_No,Acc_Date) A RIGHT OUTER JOIN (SELECT Acc_No,Acc_Date, Today_Money FROM T2 WHERE Acc_Date=DATEADD(DD,-1,@Acc_Date) and Acc_No=@Acc_No ) B ON A.Acc_No=B.Acc_No GO exec p3 'A0001','2012/6/17' -- 执行成功;但不能插入数据
CREATE PROC p6 (@Acc_No varchar(20), @Acc_Date datetime ) AS INSERT INTO T2 (Acc_No,Acc_Date,Today_Money,Yesterday_Money) SELECT Acc_No, Acc_Date, (SELECT SUM(isnull(In_Money, 0) - isnull(Out_Money, 0)) FROM T1 b WHERE Acc_No=@Acc_No AND Acc_Date=@Acc_Date and b.Acc_Date <= a.Acc_Date) AS Today_Money, ISNULL ((SELECT SUM(isnull(In_Money, 0) - isnull(Out_Money, 0)) FROM T1 b WHERE Acc_No=@Acc_No AND Acc_Date=@Acc_Date and b.Acc_Date < a.Acc_Date), 0) AS Yesterday_Money FROM Db_Accbook a GROUP BY Acc_No, Acc_Date exec p6 'A0001','2012/6/17' --提示無法插入 NULL 值到資料行 'Today_Money',資料--表 'SysAcc.dbo.T2; --資料行不得有 Null。INSERT 已經失敗。 --陳述式已經結束。
CREATE PROC p6 (@Acc_No varchar(20), @Acc_Date datetime ) AS INSERT INTO T2 (Acc_No,Acc_Date,Today_Money,Yesterday_Money) SELECT Acc_No, Acc_Date, ISNULL((SELECT SUM(isnull(In_Money, 0) - isnull(Out_Money, 0)) FROM T1 b WHERE Acc_No=@Acc_No AND Acc_Date=@Acc_Date and b.Acc_Date <= a.Acc_Date) ,0) AS Today_Money, ISNULL ((SELECT SUM(isnull(In_Money, 0) - isnull(Out_Money, 0)) FROM T1 b WHERE Acc_No=@Acc_No AND Acc_Date=@Acc_Date and b.Acc_Date < a.Acc_Date), 0) AS Yesterday_Money FROM Db_Accbook a GROUP BY Acc_No, Acc_Date -- exec p6 'A0001','2012/6/17'
------解决方案--------------------
1、第一个存储过程p3,把变量带进去,看看select出的结果集是否为空。
2、第二个存储过程p6,看看t2表Today_Money的设计是不是不允许为NULL。