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的输入变量。但如果要检查字段的值,则不是正确的方法