Создать именованный столбец по умолчанию в операторе CREATE TABLE в ANSI SQL - PullRequest
2 голосов
/ 27 октября 2011

Я хочу создать именованное значение по умолчанию в соответствии с требованиями ANSI, если это возможно, в операторе CREATE TABLE

Если я попытаюсь добавить CONSTRAINT, как обычно, записываю его в операторе ALTER TABLE, он завершится неудачно (по крайней мере, в SQL SERVER, хотя я подчеркиваю, что надеюсь найти оператор жалобы ANSI, так как я бы предпочел, чтобы он работал через различные соединения Ado.NET DbConnections).

Пример:

CREATE TABLE [dbo].[MyExample]
(
Id int NOT NULL IDENTITY (1, 1),
Name varchar(512) NOT NULL,         
IsActive bit NOT NULL,
CONSTRAINT PK_MyExample PRIMARY KEY CLUSTERED (Id),
CONSTRAINT DF_MyExample_IsActive  DEFAULT (1) FOR [IsActive]
)

Ошибка:

Неверный синтаксис рядом с 'for'.

Ответы [ 2 ]

5 голосов
/ 27 октября 2011

С точки зрения стандарта SQL-92, который, кстати, является ISO (I = International) и ANSI (A + American), DEFAULT не является ограничением, которому может быть присвоено имя.В SQL-92 DEFAULT может быть определен только в соответствии с определением столбца и должен находиться между типом данных и NOT NULL (если используется), например,

CREATE TABLE T (c INTEGER DEFAULT 1 NOT NULL UNIQUE);

Обратите внимание, что у вас много нестандартныхсинтаксис в вашем небольшом примере:

  • квадратные скобки в виде заключенных в кавычки идентификаторов (должны быть в двойных кавычках)
  • несовместимый тип данных (например, неверное bit нулевое поведение)
  • сокращенные типы данных (например, int вместо INTEGER)
  • IDENTITY
  • CLUSTERED
1 голос
/ 27 октября 2011

Разве это не соответствует ANSI?

CREATE TABLE [dbo].[MyExample]
(
    Id int NOT NULL IDENTITY (1, 1),
    Name varchar(512) NOT NULL,         
    IsActive bit NOT NULL CONSTRAINT DF_MyExample_IsActive DEFAULT (1),
    CONSTRAINT PK_MyExample PRIMARY KEY CLUSTERED (Id)
)
...