0

大家下午好

我有一个用于跟踪装配线上生产的数据库。

成品将有效地显示每条stage生产线和当前在其中的序列号。

我已经创建了一个存储过程来检索和显示这些数据,但是我正在努力将一台机器从一个到另一个移动stage 1到等等stage 2......该表非常简单,它包含以下行:stage 2stage 3

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

实际上,我想构建一个存储过程来将Build_IDwhere的值移动Stage_ID = 1Stage_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

键是不可变的,因此您必须插入新行并删除旧行。那里不是理想的设计。

PS 如果 StageID 是您所拥有的 PK,那么您只能拥有 StageID = 2 的一行:

 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。Stage 是一个变化的值,一个构建的属性或属性,而 PK 是一个不可变的实体标识符。

于 2013-04-05T12:42:55.280 回答
0

这样的事情可能会奏效。
第 1 步 - 获取构建 ID 的最大阶段 ID 并将其设置为变量。第 2 步 - 将记录添加到表中。阶段 id 将是第 1 步中的变量加 1。

于 2013-04-05T12:44:21.933 回答
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 回答