仅当列中不存在值时才尝试执行SQL命令

时间:2019-12-30 12:31:50

标签: mysql sql mysql-workbench

我试图在列中不存在值的情况下执行SQL命令,

此脚本实际上试图实现的是在t_bridge表中插入一组新值。

我看到了this answer,但出现此错误-如果在此位置无效

在这里我似乎走错了方向,而我却缺少了一些至关重要的东西。

IF EXISTS (SELECT * FROM t_bridge WHERE serial_number = 1234)
BEGIN
    -- don't do anyting
END
ELSE
BEGIN
    insert into t_bridge 
    values (
           ID
          ,app_id
          ,1 
          ,'SAN-2-H-5G-EU V4' 
          ,470  /
          ,29569 
          ,35 
          ,HARDWARE_VERSION
          ,SOFTWARE_VERSION
          ,'MEN4' 
          ,DESCRIPTION
          ,DETAILS
          ,1234 
          ,STATUS
          ,INSTALL_DATE
          ,LAST_CONNECTED_DATE
          ,STATUS_CHANGED_DATE
          ,ERASED
          ,999 
          ,LOCATION_ID
          ,unix_timestamp(now())*1000  
          ,unix_timestamp(now())*1000 
          ,NULL 
          ,NULL 
          ,SITE_ID
          ,CONNECTION_TYPE
          ,NETWORK_NAME
          ,2 
          ,ICCID
          ,DATA_PLAN_VALID_DATE
          ,1 
          ,NULL
          ,'automatically'
          );

    insert into t_chap_token (BRIDGE_ID,BRIDGE_SERIAL_NUMBER,TOKEN)
     VALUES (
     (select id from t_bridge where SERIAL_NUMBER = 1234)
     ,'1234'                                                
     ,'XXXXXXXXXXX='                        
END

2 个答案:

答案 0 :(得分:0)

您可以使用t_bridge WHERE serial_number = 1234中的SELECT COUNT(ID)作为值存在。而且相当空的if子句,您可以使用NOT EXISTS然后插入值。我发现了这个MySQL Workbench reports "is not valid at this position for this server version" error

答案 1 :(得分:0)

因此,由于我不太熟悉SQL脚本, 事实证明,我需要在过程中创建和运行它。

这是这样做的方法:

DROP procedure IF EXISTS `PROCEDURE_NAME`;

DELIMITER $$
USE `DB_NAME`$$
CREATE PROCEDURE `PROCEDURE_NAME`()
BEGIN
     IF EXISTS (SELECT * FROM t_bridge WHERE serial_number = 1234)
BEGIN
    -- don't do anyting
END
ELSE
BEGIN
    insert into t_bridge 
    values (
           ID
          ,app_id
          ,1 
          ,'SAN-2-H-5G-EU V4' 
          ,470  /
          ,29569 
          ,35 
          ,HARDWARE_VERSION
          ,SOFTWARE_VERSION
          ,'MEN4' 
          ,DESCRIPTION
          ,DETAILS
          ,1234 
          ,STATUS
          ,INSTALL_DATE
          ,LAST_CONNECTED_DATE
          ,STATUS_CHANGED_DATE
          ,ERASED
          ,999 
          ,LOCATION_ID
          ,unix_timestamp(now())*1000  
          ,unix_timestamp(now())*1000 
          ,NULL 
          ,NULL 
          ,SITE_ID
          ,CONNECTION_TYPE
          ,NETWORK_NAME
          ,2 
          ,ICCID
          ,DATA_PLAN_VALID_DATE
          ,1 
          ,NULL
          ,'automatically'
          );

    insert into t_chap_token (BRIDGE_ID,BRIDGE_SERIAL_NUMBER,TOKEN)
     VALUES (
     (select id from t_bridge where SERIAL_NUMBER = 1234)
     ,'1234'                                                
     ,'XXXXXXXXXXX='                        
END