2016-04-07 4 views
0

У меня есть 2 таблицы: 1st: Equipment, 2nd: Control_Log Таблица оборудования хранит SetId & Поля состояния сканеров. В таблице Control_Log хранятся только сканеры, используемые в течение дня.SQL Stored Proc с использованием WHEN

Как обновить поле «Таблица оборудования» [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

ответ

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; 
+0

10-Q Рахул ... это сработало .... !!!! – Sepa

+0

@Sepa, подумайте о принятии ответа, нажав кнопку «Проверить». – Rahul

0

Ваш запрос будет всегда установить значение EStatus на 'In-Use' на основе сопоставления SETID значение @Scan, поскольку элемент EXISTS всегда будет правдой.

- Добавлены тестовые значения в таблице Control_Log ... --insert INTO Control_Log --VALUES ('1', '12', '4')

DECLARE @Scan NVARCHAR (4) ;

SET @Scan = 1;

- Это сбросит все значения EStatus до NULL ... ОБНОВЛЕНИЕ Оборудование SET EStatus = NULL;

- Используйте этот запрос для обновления с помощью параметра @Scan ... UPDATE е SET e.EStatus = 'In-Use' ОТ оборудования AS е WHERE e.SetID = @Scan И СУЩЕСТВУЕТ (SELECT c.SCAN1, c.SCAN2, c.SCAN3 ОТ Control_Log с ГДЕ c.SCAN1 = e.SetID ИЛИ c.SCAN2 = e.SetID ИЛИ c.SCAN3 = e.SetID)

- - Используйте этот запрос для обновления всех записей оборудования - которые соответствуют значениям в Control_Log, -. Без использования параметра ... --ВЫБЕРИТЕ е * UPDATE е SET e.EStatus = 'In-Use' ОТ оборудования AS е ГДЕ СУЩЕСТВУЕТ (SELECT c.SCAN1, c.SCAN2, c.SCAN3 ОТ Control_Log с ГДЕ c.SCAN1 = e.SetID ИЛИ c.SCAN2 = e.SetID ИЛИ c.SCAN3 = e.SetID)

SELECT * FROM Control_Log

SELECT * FROM Оборудование

Image of above queries

Equipment values after update query

+0

10-Q user2062887 для вашей информации ... – Sepa

+0

Добро пожаловать в переполнение стека.Прочитайте следующую статью о том, как написать хороший ответ: http://stackoverflow.com/help/how-to-answer –

Смежные вопросы