当前位置: 代码迷 >> Sql Server >> sql 调用存储过程不能安插数据
  详细解决方案

sql 调用存储过程不能安插数据

热度:99   发布时间:2016-04-27 12:14:37.0
sql 调用存储过程不能插入数据
SQL code
CREATE PROC P3     (@Acc_No VARCHAR(20),      @Acc_Date DATETIME    )ASINSERT 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_MoneyFROM(SELECT         Acc_No, Acc_Date,SUM(In_Money-Out_Money) AS MoFROM             T1 WHERE   Acc_Date >= DATEADD(DD,-1,@Acc_Date) AND Acc_Date<@Acc_Date  and [email protected]_No GROUP BY Acc_No,Acc_Date) A RIGHT OUTER  JOIN(SELECT         Acc_No,Acc_Date, Today_MoneyFROM             T2WHERE Acc_Date=DATEADD(DD,-1,@Acc_Date)  and [email protected]_No) B  ON A.Acc_No=B.Acc_NoGOexec p3 'A0001','2012/6/17'  -- 执行成功;但不能插入数据

====================================
SQL code
CREATE PROC p6    (@Acc_No varchar(20),    @Acc_Date datetime    )ASINSERT 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          [email protected]_No AND  [email protected]_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        [email protected]_No AND [email protected]_Date and  b.Acc_Date < a.Acc_Date), 0)                           AS Yesterday_MoneyFROM             Db_Accbook aGROUP BY  Acc_No, Acc_Dateexec 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    )ASINSERT 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          [email protected]_No AND  [email protected]_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        [email protected]_No AND [email protected]_Date and  b.Acc_Date < a.Acc_Date), 0)                           AS Yesterday_MoneyFROM             Db_Accbook aGROUP BY  Acc_No, Acc_Date-- exec p6 'A0001','2012/6/17'
------解决方案--------------------
1、第一个存储过程p3,把变量带进去,看看select出的结果集是否为空。
2、第二个存储过程p6,看看t2表Today_Money的设计是不是不允许为NULL。
  相关解决方案