T-SQL';如果';条件无法识别列名

T-SQL';如果';条件无法识别列名,sql,tsql,Sql,Tsql,我试图用一些“条件逻辑”来执行这个查询,这是我第一次尝试在数据库中执行类似的操作 代码如下: DECLARE @iddevice INT; SET @iddevice = 15; IF(@iddevice = 15 AND DEVICEATTRIBUTES.DEVICEATTRIBUTE = 'PortA') BEGIN UPDATE DEVICEATTRIBUTES SET VALUE = '4701' WHERE IDDEVICE = 15 AND DEVICEATTRIBUT

我试图用一些“条件逻辑”来执行这个查询,这是我第一次尝试在数据库中执行类似的操作

代码如下:

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

我知道语法有问题,我的问题是。。。如何在'if'子句中添加
DEVICEATTRIBUTE.DEVICEATTRIBUTE

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

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

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

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

在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
子句匹配,则不会更新任何行。

在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
子句匹配的行,则不会更新任何行。

可能您必须在If中有一个关于deviceattribute to value的输入变量。但是,如果您想检查字段的值是否正确,则可能必须在if中有一个关于deviceattribute to value的输入变量。但如果要检查字段的值,则不是正确的方法