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#作为应用程序,如果这是相关的.
你可以试试这个
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)
然后从您的应用程序为每个用户调用它
| 归档时间: |
|
| 查看次数: |
19361 次 |
| 最近记录: |