【发布时间】:2015-11-10 14:01:03
【问题描述】:
以下 SQL 代码在 MYSQL 上运行良好,它包含有效的 SQL 查询语言。但是,这在嵌入式 Firebird 服务器上不起作用。
SQL 代码:
CREATE TABLE publications (
id int(11) NOT NULL,
filename varchar(500) NOT NULL,
title varchar(500) DEFAULT NULL,
authors varchar(1000) DEFAULT NULL,
uploader int(7) DEFAULT NULL,
keywords varchar(500) DEFAULT NULL,
rawtext text,
rawbinarydata blob NOT NULL,
lastmodified timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
ALTER TABLE publications
ADD PRIMARY KEY (id),
ADD UNIQUE KEY filename (filename);
ALTER TABLE publications
MODIFY id int(11) NOT NULL AUTO_INCREMENT;
使用查询的 C# 代码是:
try
{
using( cmd.Connection = connect_to_fbserver() )
{
cmd.CommandText = fresh_db_creation_statement;
cmd.Connection.Open();
cmd.ExecuteNonQuery();
}
return true;
}
catch( Exception exx )
{
lasterror = exx.Message;
return false;
}
fresh_db_creation_statement是第一个代码清单中的sql代码。
错误在lasterror = exx.Message; 被捕获,值为:"Dynamic SQL Error\nSQL error code = -104\nToken unknown - line 2, char 13",这意味着( 被嵌入式firebird(即line 2, char 13)标记。
当我删除所有大小的已定义数据值类型(例如,将 id int(11) NOT NULL 更改为 id int NOT NULL)时,它将标记 NOT。
如何让 Firebird 接受此查询并正常执行?
【问题讨论】:
-
CREATE TABLE 不符合 ANSI SQL。 (使用 SQL Validator 验证 ANSI/ISO SQL 语法合规性,developer.mimer.com/validator/parser200x/index.tml#parser.)
-
你能帮助我们获得一个有效的 SQL 代码来达到同样的效果吗? (请注意,Mimer SQL 验证器表明
AUTO_INCREMENT没有替代品)。是不是说ANSI SQL不支持AUTO_INCREMENT? -
我们通常使用生成器精简版而不是自动增量:CREATE GENERATOR GEN_JIZDA_ID;将生成器 GEN_JIZDA_ID 设置为 1; newID = gen_id(gen_jizda_id,1);
-
此问题尚未接受答案。
-
使用 Fb 和 adoprovider 不能一次执行多个查询看这里:stackoverflow.com/questions/33635825/…
标签: c# sql firebird firebird-embedded