Sql 第一步:我的理论正确吗?
这是我的第一个程序。我正在尝试设置它,以便它每天在数据库中更新数据时计算这3个值。它将被设置为在数据库每晚更新后立即运行 但是,当我运行Sql 第一步:我的理论正确吗?,sql,sql-server,Sql,Sql Server,这是我的第一个程序。我正在尝试设置它,以便它每天在数据库中更新数据时计算这3个值。它将被设置为在数据库每晚更新后立即运行 但是,当我运行EXEC语句时,没有返回任何数据,因此我假设存在问题 我这样做对吗?SUM是否正确使用?是否存在逻辑错误或我正在做的其他错误导致过程不返回任何值 这是create/alter procedure语句: Alter Procedure [dbo].[uspCalc] @Table2ValueSum MONEY OUT , @Table3Value
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返回了其中两列的值,但是当我第二次运行查询时,它们都是空值?这是有原因的吗?结果将取决于数据库中包含的数据。感谢您的帮助:)