Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 第一步:我的理论正确吗?_Sql_Sql Server - Fatal编程技术网

Sql 第一步:我的理论正确吗?

Sql 第一步:我的理论正确吗?,sql,sql-server,Sql,Sql Server,这是我的第一个程序。我正在尝试设置它,以便它每天在数据库中更新数据时计算这3个值。它将被设置为在数据库每晚更新后立即运行 但是,当我运行EXEC语句时,没有返回任何数据,因此我假设存在问题 我这样做对吗?SUM是否正确使用?是否存在逻辑错误或我正在做的其他错误导致过程不返回任何值 这是create/alter procedure语句: Alter Procedure [dbo].[uspCalc] @Table2ValueSum MONEY OUT , @Table3Value

这是我的第一个程序。我正在尝试设置它,以便它每天在数据库中更新数据时计算这3个值。它将被设置为在数据库每晚更新后立即运行

但是,当我运行
EXEC
语句时,没有返回任何数据,因此我假设存在问题

我这样做对吗?
SUM
是否正确使用?是否存在逻辑错误或我正在做的其他错误导致过程不返回任何值

这是create/alter procedure语句:

Alter Procedure [dbo].[uspCalc] 
    @Table2ValueSum MONEY OUT
    , @Table3ValueSum MONEY OUT
    , @Table1ValueSum MONEY OUT
As
Select 
    Table1.ClientNo
    , Table1.FileNo
    , Table1.SectionNo
    , Table1.RiskNo
    , Sum(Table1.Table1Value) AS Table1ValueSum
    , Sum(Table2.Table2Value) AS Table2ValueSum
    , Sum(Table3.Table3Value) AS Table3ValueSum 
From 
        Table1  
    LEFT OUTER Join 
        Table2 On Table1.ClientNo = Table2.ClientNo
                 AND Table1.FileNo = Table2.FileNo
                 AND Table1.SectionNo = Table2.SectionNo
                 AND Table1.RiskNo = Table2.RiskNo  
    Left Outer Join 
        Table3 On Table1.ClientNo = Table3.ClientNo
                 AND Table1.FileNo = Table3.FileNo
                 AND Table1.SectionNo = Table3.SectionNo
                 AND Table1.RiskNo = Table3.RiskNo
Where 
       Table1.RiskEndDate IS NULL
       AND Table2.EndDate IS NULL
Group By
       Table1.ClientNo
    , Table1.FileNo
    , Table1.SectionNo
    , Table1.RiskNo
    , Table2.ItemCode
    , Table3.ExtCode
HAVING
    @Table2ValueSum = Sum(Table2.Table2Value)
    AND
    @Table3ValueSum = Sum(Table3.Table3Value)
    AND
    @Table1ValueSum = Sum(Table1.Table1Value)
Go
这是
EXEC
语句:

DECLARE @Table2ValueSum MONEY, @Table3ValueSum MONEY, @Table1ValueSum MONEY

EXEC uspCalc @Table2ValueSumOUTPUT, @Table3ValueSum OUTPUT, @Table1ValueSum OUTPUT

非常感谢您的帮助,如果我遗漏了任何必需的信息,对不起,请说出需要帮助的内容,我将尽快更新。

首先,您没有为
输出
变量指定任何值,因此它们都将
为空。然后在proc中,在
HAVING
子句中使用这些变量。这将导致您的
SELECT
语句不返回任何结果

您可能希望尝试以下方法:

Select 
      @Table1ValueSum = Sum(Table1.Table1Value)
    , @Table2ValueSum = Sum(Table2.Table2Value)
    , @Table3ValueSum = Sum(Table3.Table3Value)

From Table1 

    LEFT OUTER Join Table2 On
        Table1.ClientNo = Table2.ClientNo
        AND
        Table1.FileNo = Table2.FileNo
        AND
        Table1.SectionNo = Table2.SectionNo
        AND
        Table1.RiskNo = Table2.RiskNo   

    Left Outer Join Table3 On
        Table1.ClientNo = Table3.ClientNo
        AND
        Table1.FileNo = Table3.FileNo
        AND
        Table1.SectionNo = Table3.SectionNo
        AND
        Table1.RiskNo = Table3.RiskNo

Where 
    Table1.RiskEndDate IS NULL
    AND
    Table2.EndDate IS NULL

Group By
    Table1.ClientNo
    , Table1.FileNo
    , Table1.SectionNo
    , Table1.RiskNo
    , Table2.ItemCode
    , Table3.ExtCode

我按照建议对其进行了更改,还将WHERE语句更改为OR,OR返回了其中两列的值,但是当我第二次运行查询时,它们都是空值?这是有原因的吗?结果将取决于数据库中包含的数据。感谢您的帮助:)