t-sql“if”条件无法识别列名

2lpgd968  于 2021-07-24  发布在  Java
关注(0)|答案(2)|浏览(350)

我试图用一些“条件逻辑”来执行这个查询,这是我第一次尝试在数据库中这样做。
代码如下:

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 在“如果”条款里?

zc0qhyus

zc0qhyus1#

您可以按以下方式重新编写脚本:

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')
zbdgwd5y

zbdgwd5y2#

在sql server中,可以使用 UPDATEJOIN :

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 则不更新任何行。

相关问题