要更新字段的SQL Server临时表

要更新字段的SQL Server临时表,sql,sql-server,Sql,Sql Server,我有这段代码,当我运行它时,我得到以下信息: DECLARE @Consumption float = 2211, @BillingMonth datetime = '2012-11-01 00:00:00.000', @SiteName varchar(100) = 'Aldr', @Type int = 1 SELECT Consumption, MeterID, SiteID FROM tblM

我有这段代码,当我运行它时,我得到以下信息:

 DECLARE @Consumption float = 2211,
            @BillingMonth datetime = '2012-11-01 00:00:00.000',
            @SiteName varchar(100) = 'Aldr',
            @Type int = 1


    SELECT Consumption, MeterID, SiteID
    FROM  tblMEP_Sites

    JOIN tblMEP_Meters
    ON tblMEP_Meters.SiteID = tblMEP_Sites.ID

    JOIN tblMEP_Monthlydata
    ON tblMEP_MonthlyData.MeterID = tblMEP_Meters.ID

    WHERE ProjectID = 40
    AND tblMEP_Sites.Name LIKE @SiteName

    AND Type = @Type
    AND BillingMonth = @BillingMonth
Consumption MeterID SiteID
2211        13274   1622
结果:

Consumption MeterID SiteID
25900   13274   1622
我想使用update语句更新消费字段:

Update tblMEP_Monthlydata
SET Consumption= @Consumption
并获取MeterID和SiteID,因此结果如下所示:

 DECLARE @Consumption float = 2211,
            @BillingMonth datetime = '2012-11-01 00:00:00.000',
            @SiteName varchar(100) = 'Aldr',
            @Type int = 1


    SELECT Consumption, MeterID, SiteID
    FROM  tblMEP_Sites

    JOIN tblMEP_Meters
    ON tblMEP_Meters.SiteID = tblMEP_Sites.ID

    JOIN tblMEP_Monthlydata
    ON tblMEP_MonthlyData.MeterID = tblMEP_Meters.ID

    WHERE ProjectID = 40
    AND tblMEP_Sites.Name LIKE @SiteName

    AND Type = @Type
    AND BillingMonth = @BillingMonth
Consumption MeterID SiteID
2211        13274   1622
诱惑是解决这个问题的办法吗?如果是,如何将上述代码转换为临时表?

    DECLARE @Consumption float = 2211,
            @BillingMonth datetime = '2012-11-01 00:00:00.000',
            @SiteName varchar(100) = 'Aldr',
            @Type int = 1

    UPDATE tblMEP_Monthlydata 
    set 
    Consumption = @Consumption


    FROM  tblMEP_Sites

    JOIN tblMEP_Meters
    ON tblMEP_Meters.SiteID = tblMEP_Sites.ID

    JOIN tblMEP_Monthlydata
    ON tblMEP_MonthlyData.MeterID = tblMEP_Meters.ID

    WHERE ProjectID = 40
    AND tblMEP_Sites.Name LIKE @SiteName

    AND Type = @Type
    AND BillingMonth = @BillingMonth

您需要首先对数据执行
更新
,然后执行
选择

UPDATE MD
SET Consumption = @Consumption
FROM  tblMEP_Sites S
INNER JOIN tblMEP_Meters M
    ON M.SiteID = S.ID
INNER JOIN tblMEP_Monthlydata MD
    ON MD.MeterID = M.ID
WHERE ProjectID = 40                -- use the table alias as a prefix 
AND S.Name LIKE @SiteName           -- changed the LIKE with "=" because 
                                    -- they are doing the same
AND Type = @Type                    -- use the table alias as a prefix
AND BillingMonth = @BillingMonth    -- use the table alias as a prefix


SELECT Consumption, MeterID, SiteID
FROM  tblMEP_Sites S
INNER JOIN tblMEP_Meters M
    ON M.SiteID = S.ID
INNER JOIN tblMEP_Monthlydata MD
    ON MD.MeterID = M.ID
WHERE ProjectID = 40                
AND S.Name LIKE @SiteName           
AND Type = @Type                    
AND BillingMonth = @BillingMonth    

目前我们不知道您的
消费表
与其他任何表的关联情况抱歉!是tblMEP_monthlyDATA我不认为op想要更新该表上的所有行。不是真的,您只是在已经提供的代码中添加了
UPDATE
。我认为,如果你想在不等待澄清的情况下为他/她指出正确的方向,你至少可以假设
ConsumptionTable
上有一列用于
JOIN
,实际上他是在询问使用临时表的问题,这表明不需要临时表。你觉得这个答案没有价值。我从来没有说过这个答案没有价值。如果我想到这一点,我会投反对票,但我没有