日期:2014-05-18  浏览次数:20397 次

sql 调用存储过程不能插入数据
SQL code

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'  -- 执行成功;但不能插入数据


====================================
SQL code

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 已經失敗。
--陳述式已經結束。

请大侠帮我看看 哪里有问题

------解决方案--------------------
SQL code
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。