2012-12-02 106 views
0

DDL脚本创建触发器(下文源)失败2个错误:DDL创建触发器脚本失败

声明失败,SQLSTATE = 42000 动态SQL错误 -SQL错误代码= -104 - 命令意外结束 - 线3,列44 在文件C线0后:\ CRMDemo \数据库\ DDL \ Trigger_Orders.sql 声明失败,SQLSTATE = 42000 动态SQL错误 -SQL错误代码= -104 -Token未知 - 第1行第1列 -end 在文件第14行C:\ CRMDemo \ Database \ DDL \ Trigger_Orders.sql

(第3行,第44列看起来可能是闭幕演讲)。 我找不到有关错误42000或-104的任何信息。 该触发器设计用于从发生器分配一个记录号,该发生器确实存在。该触发器可以在Interbase中从相同的脚本中正常工作。 我唯一能想到的是列大小Integer对于返回的值不正确。但文档说价值可能被截断,但应该为预期值(1)工作。

CREATE TRIGGER ORDERS_GENERATE_KEY FOR ORDERS ACTIVE BEFORE INSERT POSITION 95 AS 
begin 
    NEW.ORDER_NR = GEN_ID(NEW_ORDER_NUMBER, 1); 
end; 

Firebird是ver 2.5.2,刚下载。 Windows 7.数据库应该是32位。

+0

你用什么工具来执行该语句? –

+0

就像背景信息:SQLState 42000是SQL:2003标准中定义的非常通用的错误'语法错误或访问规则违规'。错误-104是通用或语法错误的firebird等效项(Interbase 6.0语言参考(第205-206页)的表6.4列出了与该错误代码有关的约15个错误)。结合消息'令牌未知'(firebird error 335544634),这意味着代码中存在语法错误。 –

回答

2

如果您在使用ISQL实用采取确保一组项运营商正在使用运行语句:

SET TERM^; 

CREATE TRIGGER ORDERS_GENERATE_KEY FOR ORDERS 
    ACTIVE 
    BEFORE INSERT 
    POSITION 95 
AS 
begin 
    NEW.ORDER_NR = GEN_ID(NEW_ORDER_NUMBER, 1); 
end 
^ 

SET TERM ;^
+0

这可能是答案,明天我会试试。我正在使用isql。我的其他DDL脚本工作。只有触发器脚本才有“;”在sql create语句中。我习惯了Interbase,它在几个版本前放弃了Set Term。我一直在从我的脚本中删除它们。我从来没有在这里想过他们。 –