SQL Server:动态更新多行

Las*_*tad 4 sql sql-server stored-procedures sql-server-2005 sql-update

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

Username   FirstName   LastName 
-------------------------------
user1      John        Doe 
user2      Jane        Doe
user3      bill        gates
Run Code Online (Sandbox Code Playgroud)

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

Username   FirstName   LastName 
-------------------------------
user1      John        Deer 
user2      Jane        Farmer
user3      Gill        Bates
Run Code Online (Sandbox Code Playgroud)

是否最好UPDATE为每个用户使用一个语句?或者是否可以使用一个查询执行此操作?

是否可以将它放在存储过程中并提供值集合?

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

我目前正在使用SQL Server 2005和C#作为应用程序,如果这是相关的.

Rom*_*kar 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
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)

对于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
Run Code Online (Sandbox Code Playgroud)

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