T- SQL Условие 'IF' не может распознать имя столбца - PullRequest
0 голосов
/ 09 июля 2020

Я пытаюсь выполнить этот запрос с некоторым 'условным логом c', это моя первая попытка сделать что-то подобное в базах данных.

Вот код:

DECLARE @iddevice INT;
SET @iddevice = 15;
IF(@iddevice = 15 AND DEVICEATTRIBUTES.DEVICEATTRIBUTE = 'PortA')
 BEGIN
  UPDATE DEVICEATTRIBUTES
  SET VALUE = '4701'
  WHERE IDDEVICE = 15 AND DEVICEATTRIBUTES.DEVICEATTRIBUTE = 'PortA'
 END


IF(@iddevice = 15 AND DEVICEATTRIBUTES.DEVICEATTRIBUTE = 'PortB')
 BEGIN
  UPDATE DEVICEATTRIBUTES
  SET VALUE = '4711'
  WHERE IDDEVICE = 15 AND DEVICEATTRIBUTES.DEVICEATTRIBUTE = 'PortB'
 END


IF(@iddevice = 15 AND DEVICEATTRIBUTES.DEVICEATTRIBUTE = 'IP')
 BEGIN
  UPDATE DEVICEATTRIBUTES
  SET VALUE = '172.19.106.201'
  WHERE IDDEVICE = 15 AND DEVICEATTRIBUTES.DEVICEATTRIBUTE = 'IP'
 END;

GO

Я знаю, что что-то не так с синтаксисом, у меня вопрос ... как я могу добавить DEVICEATTRIBUTES.DEVICEATTRIBUTE в предложение 'if'?

Ответы [ 2 ]

1 голос
/ 09 июля 2020

В SQL Server вы можете использовать UPDATE с JOIN:

UPDATE DA
    SET VALUE = '4701'
    FROM DEVICEATTRIBUTES DA JOIN
         (VALUES ('PortA', '4701'),
                 ('PortB', '4711'),
                 ('IP', '172.19.106.201')
         ) V(DEVICEATTRIBUTE, VALUE)
         ON DA.DEVICEATTRIBUTE = V.DEVICEATTRIBUTE
    WHERE IDDEVICE = 15;

Предложение VALUES - удобный способ добавить значения, которые вы хотите изменить - и это снижает риск опечаток.

Однако в вашем коде вы можете просто использовать три UPDATE s. Операторы IF не нужны. Если ни одна строка не соответствует предложению WHERE, то никакие строки не обновляются.

1 голос
/ 09 июля 2020

Ваш сценарий можно переписать следующим образом:

DECLARE @iddevice INT;
SET @iddevice = 15;

UPDATE DEVICEATTRIBUTES
SET VALUE = 
CASE
    WHEN DEVICEATTRIBUTES.DEVICEATTRIBUTE = 'PortA' THEN '4701'
    WHEN DEVICEATTRIBUTES.DEVICEATTRIBUTE = 'PortB' THEN '4711'
    WHEN DEVICEATTRIBUTES.DEVICEATTRIBUTE = 'IP' THEN '172.19.106.201'
END
WHERE IDDEVICE = @iddevice AND DEVICEATTRIBUTES.DEVICEATTRIBUTE IN ('PortA', 'PortB', 'IP')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...