我需要将此查询转换为更新语句。我将不得不更新字段中的值。一切都已经到位,但更新声明。
以下是查询的选择版本:
SELECT i.GoLiveDate, i.FirstBonusRun, i.TechFName, i.TechLName, i.TechEmail, i.TechPhone, i.WebISPFName, i.WebISPLName,
i.WebISPEmail, i.WebISPPhone, i.FullFillFName, i.FullFillLName, i.FullFillEmail, i.FullFillPhone, d.FName,
d.LName, d.HomePhone, d.Email
FROM NC_Information i
INNER JOIN Distributor d
ON d.DistID = i.ClientID
WHERE clientID = @value
是否可以在同一查询中更新两个不同的表?
这是我到目前为止的代码:
public void Update (int ClientID)
{
using ( var conn = new SqlConnection( GeneralFunctions.GetConnectionString() ) )
using ( var cmd = conn.CreateCommand() )
{
conn.Open();
cmd.CommandText =
@"SELECT i.GoLiveDate, i.FirstBonusRun, i.TechFName, i.TechLName, i.TechEmail, i.TechPhone, i.WebISPFName, i.WebISPLName,
i.WebISPEmail, i.WebISPPhone, i.FullFillFName, i.FullFillLName, i.FullFillEmail, i.FullFillPhone, d.FName,
d.LName, d.HomePhone, d.Email
FROM NC_Information i
INNER JOIN Distributor d
ON d.DistID = i.ClientID
WHERE clientID = @value";
cmd.Parameters.AddWithValue( "@value", ClientID );
cmd.ExecuteNonQuery();
}
}
答案 0 :(得分:3)
您无法在一个语句中更新多个表,但您可以使用事务来确保更新是相互依赖的:
BEGIN TRANSACTION
UPDATE SomeTable
SET SomeColumn = 'Foo'
WHERE SomeID = 123
UPDATE AnotherTable
SET AnotherColumn = 'Bar'
WHERE AnotherID = 456
COMMIT
答案 1 :(得分:0)
我认为,你不能直接对两个表进行更新。但您可以Optimize
查询。
<强> OUTPUT keyword in Insert/Update/Delete Statement 强>
可以使用下面提到的示例重复使用第一个Update Statement's Select Data(filtered data)
。
CREATE TABLE #table1
(
id INT,
employee VARCHAR(32)
)
go
INSERT INTO #table1 VALUES
(1, 'name1')
,(2, 'name2')
,(3, 'name3')
,(4, 'name4');
GO
DECLARE @GuestTable TABLE
(
id INT,
employee VARCHAR(32)
);
update #table1
Set id = 33
OUTPUT inserted.* INTO @GuestTable
Where id = 3
'@GuestTable'表中的数据是过滤数据,可以是 重复使用。
select * from @GuestTable
drop table #table1
答案 2 :(得分:0)
或者,您可以创建包含两个数据表的数据集,并让tableadaptermanager管理更新。