You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

执行SQL脚本触发语法错误,但确认语法合规,寻求排查方案

Toad执行SQL脚本报语法错误的排查方案

问题背景

用Toad运行SQL脚本时持续触发语法错误,但我确认SQL语法本身没问题。试过移除默认值、替换相关内容,问题仍未解决,相关SQL代码如下:

ALTER TABLE db_group ADD COLUMN IF NOT EXISTS `isPublic` tinyint(4) not null default 0;

ALTER TABLE db_group_point MODIFY COLUMN group_code varchar(50) NOT NULL DEFAULT 0 COLLATE utf8_bin;

-- ALTER TABLE db_group_point DROP PRIMARY KEY;
-- ALTER TABLE db_group_point ADD COLUMN ID int(11) PRIMARY KEY NOT NULL AUTO_INCREMENT;
-- ALTER TABLE db_group_point ADD CONSTRAINT db_group_point_Contraint1 UNIQUE (group_code, TagName, TagOrder);

DROP PROCEDURE IF EXISTS UpgradeInsight3_1;
CREATE PROCEDURE UpgradeInsight3_1 ()
BEGIN

IF NOT EXISTS (SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS
    WHERE
      (table_name = 'db_group_point')
      AND (table_schema = 'prism')
      AND (column_name = 'ID'))
THEN 
  ALTER TABLE db_group_point DROP PRIMARY KEY;
  ALTER TABLE db_group_point ADD COLUMN IF NOT EXISTS ID int(11) PRIMARY KEY NOT NULL AUTO_INCREMENT;
END IF;

IF NOT EXISTS (SELECT * FROM information_schema.TABLE_CONSTRAINTS WHERE CONSTRAINT_NAME = 'db_group_point_Contraint1')
THEN
  ALTER TABLE db_group_point ADD CONSTRAINT db_group_point_Contraint1 UNIQUE (group_code, TagName, TagOrder);
END IF;

END;

CALL UpgradeInsight3_1();
DROP PROCEDURE IF EXISTS UpgradeInsight3_1;


ALTER TABLE db_group_point ADD COLUMN IF NOT EXISTS TagAlias  varchar(255) DEFAULT NULL  COLLATE utf8_bin;


INSERT IGNORE INTO sys_user_role(ROLE_ID,USER_ID) VALUES (1, 1);
ALTER TABLE sys_user
MODIFY COLUMN ADDRESS varchar(200) DEFAULT NULL COMMENT 'Address of user',
MODIFY COLUMN EMAIL varchar(200) DEFAULT NULL COMMENT 'Email of user',
MODIFY COLUMN POSITION varchar(200) DEFAULT NULL COMMENT 'Position of user in plant',
MODIFY COLUMN DESCRIPTION varchar(300) DEFAULT NULL COMMENT 'Description more about user';


DROP PROCEDURE IF EXISTS prism.sp_mimic_stringtag_latest_values;
DELIMITER //
CREATE PROCEDURE prism.`sp_mimic_stringtag_latest_values`(
    IN tagname1 varchar(255)
)

可能的解决点

  • 调整Toad语句分隔符:脚本使用了DELIMITER //,但Toad默认以;作为语句分隔符,会导致存储过程定义未完成就被截断报错。先在Toad中将分隔符临时改为//,执行完存储过程创建代码后再改回;。
  • 修正默认值类型不匹配:group_code是varchar类型,默认值设为数字0,虽MySQL会隐式转换,但可能触发语法校验警告,建议改为字符串格式'0'。
  • 补全未完成的存储过程:最后一段CREATE PROCEDURE仅定义了参数,缺少BEGIN...END逻辑块,这会直接引发语法错误,需补全存储过程的完整代码。
  • 拆分主键添加逻辑:部分MySQL版本不支持ADD COLUMN IF NOT EXISTS直接搭配PRIMARY KEY,可拆分操作:先判断ID列是否存在,再单独执行添加列和设置主键的语句。
  • 检查字符集兼容性:确认当前数据库及目标表支持utf8_bin排序规则,避免因字符集不兼容触发报错。

内容的提问来源于stack exchange,提问作者Junk Man

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 22:57:22