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ユーザーごとに1 つのステートメントを使用するのが最善ですか? または、1 つのクエリでこれを行うことは可能ですか?

また、それをストアド プロシージャに入れて、値のコレクションを提供することは可能ですか?

2 番目の質問は、更新を行う前に値が変更されているかどうかを確認するのが最善ですか? それとも、値が同じでも全員を更新するだけですか?

関連する場合、現在、アプリケーションに 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 に答える