SQL存储过程使用WHEN

时间:2016-04-07 23:34:22

标签: sql-server tsql stored-procedures

我有2个表:第1个:设备,第2个:Control_Log Equipment表存储SetId&扫描仪的状态字段。 Control_Log表仅存储当天使用的扫描程序。

如何将我的设备表[EStatus]字段更新为“使用中”'     对于表中使用的每个扫描程序:Control_Log     很明显,下面的代码不起作用。

我有:

@Scan nvarchar(4)

UPDATE [dbo].[Equipment]
SET    status  = 'In-Use'
WHERE  EXISTS (SELECT SCAN1, SCAN2, SCAN3 FROM [dbo].[Control_Log])
AND    [SetID] = @Scan

enter image description here

2 个答案:

答案 0 :(得分:1)

执行类似

的更新加入
UPDATE
    A
SET
    status  = 'In-Use'
FROM  [dbo].[Equipment] A
    JOIN Control_Log B ON A.SetID = B.scan1
OR A.SetID = B.scan2
OR A.SetID = B.scan3
WHERE A.[SetID] = @Scan;

答案 1 :(得分:0)

您的查询将始终根据与@Scan值匹配的SetID将EStatus值设置为“正在使用”,因为EXISTS部分始终为true。

- 在Control_Log表中添加了测试值... --INSERT INTO Control_Log --VALUES( '1', '12', '4')

DECLARE @Scan nvarchar(4);

SET @Scan = 1;

- 这会将所有EStatus值重置为NULL ... 更新设备 SET EStatus = NULL;

- 使用此查询使用@Scan参数更新... 更新e SET e.EStatus ='使用中' 来自设备AS e 在哪里e.SetID = @Scan     和EXISTS         (SELECT c.SCAN1,c.SCAN2,c.SCAN3          来自Control_Log c          在哪里c.SCAN1 = e.SetID          或c.SCAN2 = e.SetID          或者c.SCAN3 = e.SetID)

- 使用此查询更新所有设备记录 - Control_Log中匹配的值, - 不使用参数...... --SELECT e。* 更新e SET e.EStatus ='使用中' 来自设备AS e 在哪里存在         (SELECT c.SCAN1,c.SCAN2,c.SCAN3          来自Control_Log c          在哪里c.SCAN1 = e.SetID          或c.SCAN2 = e.SetID          或者c.SCAN3 = e.SetID)

SELECT * FROM Control_Log

SELECT * FROM Equipment

Image of above queries

Equipment values after update query