我有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
答案 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