【问题标题】:IF in sql "Invalid column name"sql中的IF“列名无效”
【发布时间】:2015-03-13 13:13:45
【问题描述】:
DECLARE @resultado int;
SET @resultado = (SELECT COUNT(serial) FROM inventario 
WHERE serial ='strSerialNumber'); 
IF @resultado = 1 
BEGIN 
    UPDATE inventario SET simnao ='strVariavel8', local ='strVariavel1', portaria ='strVariavel9', galpao ='strVariavel2', sala ='strVariavel3', ute ='strVariavel4', ramal ='5213', centrodecusto ='strVariavel6', etiquetaMonitor ='strVariavel7', data ='date', hora ='time'
    WHERE serial ='strSerialNumber'
END 
IF (@resultado = 1) and (data = '') 
BEGIN
    UPDATE inventario SET simnao ='strVariavel8', local ='strVariavel1', portaria ='strVariavel9', galpao ='strVariavel2', sala ='strVariavel3', ute ='strVariavel4', ramal ='5213', centrodecusto ='strVariavel6', etiquetaMonitor ='strVariavel7', data ='date', hora ='time'
END
IF @resultado = 0
BEGIN
    INSERT INTO inventario (serial, hostname, simnao, usuario, local, portaria, galpao, sala, UTE, ramal, centrodecusto, etiquetamonitor, data, hora) 
    VALUES ('strSerialNumber','strHostname','strVariavel8','strUsuario','strVariavel1','strVariavel9','strVariavel2','strVariavel3','strVariavel4','3215','strVariavel6','strVariavel7','date','time')
END

我有这段代码,这应该可以工作,但是 sql 指责我没有名为“data”的列名,但我肯定有,如果我更改任何其他列的“data”,sql 会指责同样的错误,但是使用其他列名,有人可以帮忙吗?

【问题讨论】:

  • MySQL 或 SQL Server...?数据是SQL中的一个保留词,即需要用“数据”分隔。
  • 您只能在 SQL 语句中使用列名,而不能在 Transact-SQL 中使用。 IF 中的 data 不在 SQL 语句中。
  • "data" 没有在任何地方定义。您将其用作变量,而不是列名。 SQL Server 应该如何知道这是一个列名,以及它应该如何知道要与 '' 比较的行?如果“data”是“inventario”表上的一列,那么您需要从您感兴趣的特定行中选择特定列,以便获取该列的值。
  • 您正在使用 SQL Server 语法并收到 MySQL 错误?代码有很多问题。请适当地标记问题。

标签: sql sql-server if-statement mysql-error-1064 columnname


【解决方案1】:

一种可能性是将 IF 语句更改为如下内容:

IF (@resultado = 1) AND EXISTS (SELECT 1 FROM inventario 
                                WHERE serial = 'strSerialNumber' AND data = '')

这将检查您找到的单行的“数据”值,其中序列号为空字符串的“strSerialNumber”,如果该行存在,则返回 true。如果值不是'',则该行不存在,IF测试将失败,我认为这是您想要的。

【讨论】:

    【解决方案2】:

    答案是向数据声明一个变量,如下所示:

    DECLARE @resultado int; 
    DECLARE @data1 varchar(15); 
    SET @data1 = (SELECT data FROM inventario WHERE serial ='strSerialNumber'); 
    SET @resultado = (SELECT COUNT(serial) FROM inventario WHERE serial ='strSerialNumber'); 
    IF @resultado = 1 AND @data1 IS NOT NULL OR @data1 != '' 
    BEGIN 
    SET @resultado = 10 
    END 
    IF (@resultado = 1) AND @data1 is null or @data1 = ''
    BEGIN 
    UPDATE inventario SET simnao ='strVariavel8 ', local ='strVariavel1', portaria ='strVariavel9', galpao ='strVariavel2', sala ='strVariavel3', ute ='strVariavel4', ramal ='7567', centrodecusto ='strVariavel6', etiquetaMonitor ='strVariavel7', data ='date', hora ='time' WHERE serial ='strSerialNumber' 
    set @resultado = 5
    END 

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-22
      • 1970-01-01
      • 2013-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-16
      相关资源
      最近更新 更多