Неверный синтаксис рядом с 'a' с enum ('a', 'b', 'c') - PullRequest
0 голосов
/ 10 мая 2018
CREATE TABLE ec_recurring 
(   
    [recurring id] int NOT NULL IDENTITY,   
    [price] decimal(10,4) NOT NULL,
    [frequency] enum('day','week','semi_month','month','year') NOT NULL,   
    [duration] cast(10 as int) unsigned NOT NULL,
    [cycle] cast(10 as int) unsigned NOT NULL,
    [trial status] tinyint(4) NOT NULL,
    [trial price] decimal(10,4) NOT NULL,
    [trial frequency] enum('day','week','semi_month','month','year') NOT NULL,   
    [trial duration] cast(10 as int) unsigned NOT NULL,
    [trial cycle] cast(10 as int) unsigned NOT NULL,
    [status] tinyint(4) NOT NULL,   
    [sort order] cast(11 as int) NOT NULL,
    [date created] datetime2 NOT NULL,   
    [date modified] datetime2 NOT NULL,
    [created by] varchar(20) NOT NULL,   
    [modified by] varchar(20) NOT NULL,
    [active] tinyint(4) NOT NULL,   

    PRIMARY KEY ([recurring id])
) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=utf8; 

Это был мой код. Почему эта ошибка происходит около дня и приведена?

Сообщение 102, Уровень 15, Состояние 1, Строка 3922
Неверный синтаксис рядом с 'day'

Ответы [ 2 ]

0 голосов
/ 10 мая 2018

В Microsoft SQL Server нет такой вещи, как enum, это от MySql, но вы можете использовать его эквивалент:

mycol VARCHAR(10) NOT NULL CHECK (mycol IN('Useful', 'Useless', 'Unknown'))

Исходное сообщение

0 голосов
/ 10 мая 2018

Если мы говорим о T-SQL, то ошибка около дня означает, что синтаксис неверен (просто нет ключевого слова enum в T-SQL), оно должно выглядеть примерно так:

[frequency] VARCHAR(10) NOT NULL,
CONSTRAINT ck_Enum CHECK ([frequency] IN('day','week','semi_month','month','year')), 

Учитывая вторую ошибку, которую вы используете в неправильном контексте, SQL не знает тип столбца. Я считаю, что вы хотели написать:

[duration] INT DEFAULT 10 NOT NULL 
CONSTRAINT ck_Duration CHECK ([duration] > 0), 

С дополнительной проверкой, является ли длительность без знака. Вы должны соблюдать синтаксис языка, потому что у вас есть еще несколько ошибок. Пусть следующий пример для вас:

CREATE TABLE ec_recurring 
( 
[recurring id]      INT IDENTITY NOT NULL
CONSTRAINT pl_recId PRIMARY KEY, 

[price]             DECIMAL(10, 4) NOT NULL,

[frequency]         VARCHAR(10) NOT NULL,
CONSTRAINT ck_Enum CHECK ([frequency] IN('day','week','semi_month','month','year')), 

[duration]          INT DEFAULT 10 NOT NULL 
CONSTRAINT ck_Duration CHECK ([duration] > 0), 

[cycle]             INT DEFAULT 10 NOT NULL 
CONSTRAINT ck_Cycle CHECK ([cycle] > 0), 

[trial status]      TINYINT DEFAULT 4 NOT NULL, 

[trial price]       DECIMAL(10, 4) NOT NULL, 

[trial frequency]   VARCHAR(10) NOT NULL 
CONSTRAINT ck_TrialEnum CHECK ([trial frequency] IN('day','week','semi_month','month','year')), 

[trial duration]    INT DEFAULT 10 NOT NULL 
CONSTRAINT ck_TrialDuration CHECK ([trial duration] > 0), 

[trial cycle]       INT DEFAULT 10 NOT NULL 
CONSTRAINT ck_TrialCycle CHECK ([trial cycle] > 0), 

[status]            TINYINT DEFAULT 4 NOT NULL, 

[sort order]        INT DEFAULT 11 NOT NULL, 

[date created]      DATETIME2 NOT NULL, 

[date modified]     DATETIME2 NOT NULL, 

[created by]        DATETIME NOT NULL, 

[modified by]       DATETIME NOT NULL, 

[active]            TINYINT DEFAULT 4 NOT NULL, 
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...