【发布时间】:2014-08-05 08:06:03
【问题描述】:
我正在向 EA 编写插件,我想在存储库中创建新表,但我不想向每种数据库类型编写查询,而且我不知道如何编写一个查询,因为 eq. AUTO_INCREMENT 在 MySQL 中存在,但在 PostgreSQL 中不存在。所以你有什么建议?我应该使用 nHibernate 还是其他?
这是 PostgreSQL 中的查询,我需要重写到其他数据库:
CREATE OR REPLACE FUNCTION create_history ()
RETURNS void AS
$_$
BEGIN
IF EXISTS (
SELECT *
FROM pg_catalog.pg_tables
WHERE schemaname = 'public'
AND tablename = 't_history'
) THEN
RAISE NOTICE ' ';
ELSE
CREATE TABLE t_history
(
id integer NOT NULL DEFAULT nextval(('"object_id_seq"'::text)::regclass),
object_id integer NOT NULL,
object_type character varying(255),
diagram_id integer DEFAULT 0,
name character varying(255),
alias character varying(255),
author character varying(255),
ch_author character varying(255),
version character varying(50) DEFAULT '1.0'::character varying,
note text,
package_id integer DEFAULT 0,
stereotype character varying(255),
ntype integer DEFAULT 0,
createddate timestamp without time zone DEFAULT now(),
status character varying(50),
abstract character(1),
tagged integer DEFAULT 0,
pdata1 character varying(255),
pdata2 text,
pdata3 text,
pdata4 text,
pdata5 character varying(255),
concurrency character varying(50),
visibility character varying(50),
persistence character varying(50),
cardinality character varying(50),
gentype character varying(50),
genfile character varying(255),
header1 text,
header2 text,
phase character varying(50),
scope character varying(25),
genoption text,
genlinks text,
classifier integer,
ea_guid character varying(40),
parentid integer,
runstate text,
classifier_guid character varying(40),
tpos integer,
isroot integer DEFAULT 0,
isleaf integer DEFAULT 0,
isspec integer DEFAULT 0,
isactive integer DEFAULT 0,
stateflags character varying(255),
packageflags character varying(255),
multiplicity character varying(50),
styleex text,
actionflags character varying(255),
eventflags character varying(255),
CONSTRAINT t_history_pkey PRIMARY KEY (id)
);
END IF;
END;
$_$ LANGUAGE plpgsql;
SELECT create_history();
编辑
更改的查询
MySQL
CREATE TABLE IF NOT EXISTS t_history
(
id integer NOT NULL AUTO_INCREMENT,
object_id integer NOT NULL,
name character varying(255),
author character varying(255),
ch_author character varying(255),
version character varying(50) DEFAULT '1.0',
note text,
package_id integer DEFAULT 0,
stereotype character varying(255),
createddate timestamp DEFAULT now(),
pdata1 character varying(255),
pdata2 text,
pdata3 text,
pdata4 text,
phase character varying(50),
CONSTRAINT t_history_pkey PRIMARY KEY (id)
);
MSSQL
if not exists (select * from sys.tables where name = 't_history' and type = 'U')
CREATE TABLE t_history
(
id integer NOT NULL IDENTITY PRIMARY KEY,
object_id integer NOT NULL,
name character varying(255),
author character varying(255),
ch_author character varying(255),
version character varying(50) DEFAULT '1.0',
note text,
package_id integer DEFAULT 0,
stereotype character varying(255),
createddate datetime DEFAULT getdate(),
pdata1 character varying(255),
pdata2 text,
pdata3 text,
pdata4 text,
phase character varying(50)
);
【问题讨论】:
-
您能否更新一下您是如何设法实施您得到的答案的?谢谢!
标签: c# sql nhibernate enterprise-architect