要更新字段的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
,实际上他是在询问使用临时表的问题,这表明不需要临时表。你觉得这个答案没有价值。我从来没有说过这个答案没有价值。如果我想到这一点,我会投反对票,但我没有