SQL Server : update multiple rows dynamically

标签 sql sql-server sql-server-2005 stored-procedures sql-update

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

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# 作为应用程序(如果相关的话)。

最佳答案

你可以试试这个

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

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

关于SQL Server : update multiple rows dynamically,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13288803/

相关文章:

sql-server-2005 - 使用SQL数据库预填充InfoPath

vb.net - 64 位 ODBC 异常

php - 如何检索存储在表中的sql查询并为表中的所有查询创建动态php页面

sql - 如何通过一个SQL在二维中显示x,y,count(*)?

sql - SQL中是否存在 "LIKE"和 "IN"的组合?

php - 从数据库中为每个用户 ID 删除除最后 15 条之外的所有条目

sql - 当字段不是数字时转换为数字

mysql - 从 2 个表中选择的最简单方法,第二个是 where 条件

c# - 如何在 gridview asp.net 中显示查询计划

sql-server - 如何确保在 SQL 脚本失败时将登录权限重置为 MULTI_USER?