В двух БД (Firebird 1.5) отличается тип домена в поле таблицы. Например, первая БД:
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
SET SQL DIALECT 3;
SET NAMES WIN1251;
SET CLIENTLIB 'C:\Work\FirebirdBinLnk\fbclient.dll';
CREATE DATABASE 'LOCALHOST:C:\Work\ErrorDemos\IbExpert\206\Err206-1.fdb'
USER 'SYSDBA' PASSWORD 'masterkey'
PAGE_SIZE 16384
DEFAULT CHARACTER SET WIN1251;
CREATE DOMAIN "Dom1" AS SMALLINT;
CREATE DOMAIN "Dom2" AS SMALLINT;
CREATE TABLE "Table" (
"Field1" "Dom1" NOT NULL,
"Field2" "Dom2"
);
Вторая БД:
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
SET SQL DIALECT 3;
SET NAMES WIN1251;
SET CLIENTLIB 'C:\Work\FirebirdBinLnk\fbclient.dll';
CREATE DATABASE 'LOCALHOST:C:\Work\ErrorDemos\IbExpert\206\Err206-2.fdb'
USER 'SYSDBA' PASSWORD 'masterkey'
PAGE_SIZE 16384
DEFAULT CHARACTER SET WIN1251;
CREATE DOMAIN "Dom1" AS SMALLINT;
CREATE DOMAIN "Dom2" AS VARCHAR(10) CHARACTER SET WIN1251 COLLATE PXW_CYRL;
CREATE TABLE "Table" (
"Field1" "Dom1" NOT NULL,
"Field2" "Dom2" COLLATE PXW_CYRL
);
В результате сравнения этих БД получается неверный сценарий:
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
/* Server version: WI-V6.3.3.4870 Firebird 1.5
SQLDialect: 3. ODS: 10.1. Forced writes: On. Sweep interval: 20000.
Page size: 16384. Cache pages: 2048 (32768 Kb). Read-only: False. */
SET CLIENTLIB 'C:\Work\FirebirdBinLnk\fbclient.dll';
SET NAMES WIN1251;
SET SQL DIALECT 3;
CONNECT 'LOCALHOST:C:\Work\ErrorDemos\IbExpert\206\Err206-2.fdb' USER 'SYSDBA' PASSWORD 'masterkey';
SET AUTODDL ON;
/******************************************************************************/
/**** Altering domains ****/
/******************************************************************************/
UPDATE RDB$FIELDS
SET RDB$FIELD_TYPE = 7,
RDB$FIELD_LENGTH = 2,
RDB$CHARACTER_LENGTH = NULL,
RDB$FIELD_SCALE = NULL,
RDB$FIELD_PRECISION = NULL,
RDB$FIELD_SUB_TYPE = NULL
WHERE RDB$FIELD_NAME = 'Dom2';
UPDATE RDB$FIELDS SET RDB$COLLATION_ID = NULL
WHERE RDB$FIELD_NAME = 'Dom2';
COMMIT WORK;
/******************************************************************************/
/**** Altering tables ****/
/******************************************************************************/
ALTER DOMAIN Dom2
TYPE "Dom2" CHARACTER SET WIN1251;
При сравнении БД «в обратную сторону» аналогичные ошибки в сценарии.
Тестовые БД прилагаются.