0

@idと@id_groupの2つのパラメーターを使用してSQLプロシージャを作成しています。

この表を検討してくださいgroup_info

ID   ID_Group    SupercededBy   Superceded   status
1    1           null           null         H
2    1           null           null         U

これらのパラメータが与えられた場合:

@id = 2 @id_group = 1

The first thing私がする必要があるのは、行をに設定することですSupercededBy@idここで、ID=@id and id_group=@id_group and status='H'

これが私が書いたステートメントです:

  update group_info
      set supercededby = @id
      where id_group=@id_group and status='H'

The second thing私がする必要があるのは、行Supercededを上記のステートメントから更新されidSupercededByばかりのに設定することです。

したがって、この例では、row 2'sSupercededをに更新する必要があります1

しかし、ステートメントを書く方法は?ステートメントは次のようなものになると思います。

update group_info
      set superceded = **old_id**
      where id=@id

私は取得する方法を知っていますold_id、ここにあります

select id
    from group_info
    where id_group=@id_group and status='H'

しかし、上記の値とselectステートメントの値をどのように使用できますか?insertupdateold_id

ファイナルテーブルは

ID   ID_Group    SupercededBy   Superceded   status
1    1           2              null         H
2    1           null           1            U

MSSQLServerを使用しています。

4

2 に答える 2

3

ステートメントは次のSELECT @variable = columnName FROM ...ように使用できます。

DECLARE @oldId INT

select @oldId  = id
    from group_info
    where id_group=@id_group and status='H'

update group_info
      set superceded = @oldId 
      where id=@id
于 2012-11-15T15:42:44.047 に答える
0

この定義で

The second thing I need to do is to 
set the row’s Superceded to the id whose SupercededBy has been 
just updated from the above statements.

それは大規模な操作です

update group_info
set supercededby = @id
where id_group=@id_group and status='H'


Select ID,supercededby  
into #tmp
from group_info
where id_group=@id_group and status='H'



update group_info
set superceded = #tmp.ID
from #tmp 
where group_info.ID=#tmp.supercededby

Drop table #tmp
于 2012-11-15T15:58:24.357 に答える