0

皆さん、こんにちは。

組立ラインでの生産を追跡するために使用されるデータベースがあります。

完成品にはstage、各生産ラインと現在製造されているもののシリアル番号が効果的に表示されます。

このデータを取得して表示するためのストアド プロシージャを作成しましたが、苦労しているのは、マシンを移動することですstage 1。テーブルは非常に単純で、次の行が含まれています。stage 2stage 2stage 3

Stage_ID (PK, int, not null)
Build_ID(FK, int, null)

Build_ID事実上、 whereの値を に移動するストアド プロシージャを作成したいと考えていStage_ID = 1ますStage_ID = 2

どうすればこれを行うことができますか?

ありがとう

4

4 に答える 4

1
update stageTable
set build_id = (select build_id from stageTable where stage_id = 1)
where stage_id = 2

手順として必要な場合は、次のようなことができます

create procedure sp_moveStage(@from int, @to int)
as 

update stageTable
set build_id = (select build_id from stageTable where stage_id = @from)
where stage_id = @to

そしてそれを実行します

exec sp_moveStage 1, 2
于 2013-04-05T12:46:46.430 に答える
0

ええと、

DECLARE @Build_ID int;

BEGIN TRANSACTION;

SELECT @Build_ID = Build_ID FROM SomeTable WHERE Stage_ID = 1;

UPDATE SomeTable SET Build_ID = @Build_ID WHERE Stage_ID = 2;

COMMIT TRANSACTION;
于 2013-04-05T12:46:19.507 に答える
0

このようなものがうまくいくかもしれません。
ステップ 1 - ビルド ID の最大ステージ ID を取得し、変数に設定します。ステップ 2 - テーブルにレコードを追加します。ステージ ID は、ステップ 1 の変数に 1 を加えたものになります。

于 2013-04-05T12:44:21.933 に答える
0

キーは可変ではないため、新しい行を挿入して古い行を削除する必要があります。あなたが持っている理想的なデザインではありません。

PS StageID が PK である場合、StageID = 2 の行を 1 つだけ持つことができます。

 Stage_ID (PK, int, not null)   <<<---
 Build_ID(FK, int, null)

必要なのは、次のようなテーブルです。

  create table process
  (id int primary key,
   buildid int not null,
   stage  int not null,
   entrydatetime datetime,
   exitdatetime datetime
   )

ビルドがいつ処理段階に出入りするかを示します。または、ステージの値が意味のある方法で順番に並べ替えることができる場合、次のステージの開始時間を想定して、ステージが終了した時間を導き出すことができます。

いずれにせよ、「プロセスの段階」のような変化する値を PK にしたくはありません。ステージは変化する値、ビルドのプロパティまたは属性ですが、PK は不変のエンティティ識別子です。

于 2013-04-05T12:42:55.280 に答える