Stored procedures 具有默认值的存储过程

Stored procedures 具有默认值的存储过程,stored-procedures,sql-server-2005,Stored Procedures,Sql Server 2005,我有两个表:一个是城市id,名称,纬度,经度,另一个是测量城市id,测量日期,温度,湿度,风速,气压 City_id是City中的主键,是Measures中的外键。城市id和测量日期也是主键 我正试图在SQLServer2005中编写一个存储过程,它允许我计算数据库中特定城市的所有四个测量值的平均值。如果城市在度量中没有记录,我希望默认值为null 如何将这些城市的默认值设置为null?谢谢各位: 以下是我所做的代码: set ANSI_NULLS ON set QUOTED_IDENTIFIE

我有两个表:一个是城市id,名称,纬度,经度,另一个是测量城市id,测量日期,温度,湿度,风速,气压

City_id是City中的主键,是Measures中的外键。城市id和测量日期也是主键

我正试图在SQLServer2005中编写一个存储过程,它允许我计算数据库中特定城市的所有四个测量值的平均值。如果城市在度量中没有记录,我希望默认值为null

如何将这些城市的默认值设置为null?谢谢各位:

以下是我所做的代码:

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[low_temp]
     @temp real
AS
begin
    select 
        avg(m.temperature), avg(m.humidity), 
        avg(m.windspeed), avg(m.airpressure)
    from 
        city c, measures m 
    where 
        m.city_id = @temp
end
只需使用左连接:

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[low_temp]
     @temp real
AS
begin
    select avg(m.temperature), 
           avg(m.humidity), 
           avg(m.windspeed), 
           avg(m.airpressure)
    from city c
    left join measures m ON(c.city_id = m.city_id)
    where 
        c.city_id = @temp
end

-20多年前,在ANSI-92 SQL标准中,旧式的逗号分隔表列表样式被正确的ANSI连接语法所取代,不鼓励使用它来帮助:然而,如果一个答案解决了你的问题,你应该接受它,这样其他人就会知道问题已经解决了。