日期:2014-05-18 浏览次数:20563 次
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。