4

我想更新数据库中的多行,值可能不同。想象一下这张桌子:

Username   FirstName   LastName 
-------------------------------
user1      John        Doe 
user2      Jane        Doe
user3      bill        gates

如果我想更新表格,它看起来像这样:

Username   FirstName   LastName 
-------------------------------
user1      John        Deer 
user2      Jane        Farmer
user3      Gill        Bates

是否最好UPDATE为每个用户使用一个语句?或者是否可以通过一个查询来做到这一点?

也可以将它放在存储过程中并提供一组值吗?

第二个问题是最好在进行更新之前检查值是否已更改?或者即使值相同也只是更新每个人?

如果相关,我目前正在为应用程序使用 SQL Server 2005 和 C#。

4

2 回答 2

5

你可以试试这个

declare @TempTable1 table (UserName nvarchar(128) primary key, FirstName nvarchar(128), LastName(128))

insert into @TempTable1
select 'user1', 'John', 'Deer' union all
select 'user2', 'Jane', 'Farmer' union all
select 'user3', 'Gill', 'Bate'

update table1 set
    FirstName = t2.FirstName,
    LastName = t2.LastName
from table1 as t
    inner join @TempTable1 as t2 on t2.UserName = t.UserName

或者,如果您只想更新已更改的字段

update table1 set
    FirstName = isnull(t2.FirstName, t.FirstName),
    LastName = isnull(t2.LastName, t.LastName)
from table1 as t
    inner join @TempTable1 as t2 on t2.UserName = t.UserName

对于 C# 客户端应用程序,我认为通常的方法是创建过程

create procedure sp_Table1_Update
(
    @UserName nvarchar(128),
    @FirstName nvarchar(128),
    @LastName nvarchar(128)
)
as
begin
    update table1 set
        FirstName = @FirstName,
        LastName = @LastName
    where UserName = @UserName
end

然后从您的应用程序中为每个用户调用它

于 2012-11-08T12:10:43.460 回答
0

我会为各个用户创建单独的查询:

UPDATE Table1 SET FirstName = 'John', 'LastName = 'Doe' WHERE FirstName = 'John' 
    AND 'LastName = 'Deer' AND 'UserName = 'user1'

等等

您拥有唯一的用户名,因此理论上不必更新未更改的值。但是,您始终可以将其构建为额外的安全预防措施。

于 2012-11-08T12:12:38.967 回答