Как добавить ограничение по умолчанию при создании таблицы? SQL Server [закрыто]

12

Я пытаюсь создать новую таблицу со столбцами, за которыми следуют их ограничения, как показано ниже.

Create tblTest(
columns..
..
..
Gender int,
Constraint DF_tblTest_Gender Default 3 For Gender,
..
..
..
)

Тем не менее, я получаю сообщение об ошибке около ограничения по умолчанию, как,

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

Дхрув Радж
источник
Возможно, вы захотите взглянуть на официальную документацию Microsoft SQL Server для CREATE TABLE ...заявления. У вас очень простая синтаксическая ошибка.
Джон aka hot2use

Ответы:

20

Вы можете назвать ограничение встроенным:

CREATE TABLE tblTest(
  --
  --
  Gender int CONSTRAINT DF_tblTest_Gender DEFAULT 3,
  --
) ;

Как CREATE TABLEпоказывает страница msdn:

DEFAULT

... Для обеспечения совместимости с более ранними версиями SQL Server имя ограничения может быть назначено DEFAULT.

В одной и той же странице, мы можем найти , что единственные варианты <table_constraint>являются PRIMARY KEY, FOREIGN KEYи CHECKограничения:

< table_constraint > ::=  
  [ CONSTRAINT constraint_name ]   
{  
   { PRIMARY KEY | UNIQUE }  
       {   
         NONCLUSTERED (column [ ASC | DESC ] [ ,... n ])  
         | NONCLUSTERED HASH (column [ ,... n ] ) 
               WITH ( BUCKET_COUNT = bucket_count )   
       }   
    | FOREIGN KEY   
        ( column [ ,...n ] )   
        REFERENCES referenced_table_name [ ( ref_column [ ,...n ] ) ]   
    | CHECK ( logical_expression )   
}

поэтому, если вы хотите добавить ограничение по умолчанию (именование или нет), единственный способ сделать это - встроить или с помощью ALTER TABLEоператора.

ypercubeᵀᴹ
источник
Я хочу назвать свое ограничение, которое было бы невозможно, если бы я сделал это в строке. Есть ли способ без использования встроенного или изменения таблицы оператора.
Дхрув Радж
4
@DhruvRaj - возможно, как показывает этот ответ
Мартин Смит
8

В ваших комментариях к двум другим ответам утверждается, что вы не можете назвать ограничение по умолчанию при его создании «встроенным». Оба ответа показывают, что вы можете фактически указать имя для ограничения при его создании inline. Я добавлю третий пример, показывающий результаты.

IF OBJECT_ID('dbo.Test') IS NOT NULL
DROP TABLE dbo.Test;
CREATE TABLE dbo.Test
(
    TestID int NOT NULL
        CONSTRAINT PK_Test --here I'm naming the primary key constraint!
        PRIMARY KEY CLUSTERED
        IDENTITY(1,1)
    , SomeData varchar(42) NOT NULL
        CONSTRAINT DF_Test_SomeData --this is the name of the default constraint!
        DEFAULT ('Carrie Fisher')
);

INSERT INTO dbo.Test DEFAULT VALUES;

Это показывает, что имя ограничения по умолчанию DF_Test_SomeData:

SELECT TableName = t.name
    , ConstraintName = dc.name
FROM sys.default_constraints dc
    INNER JOIN sys.tables t ON dc.parent_object_id = t.object_id;

Результаты:

введите описание изображения здесь

Глядя на проводник объектов в SSMS показывает имя:

введите описание изображения здесь

Макс Вернон
источник
2

Вы можете использовать default valueна определение поля.

Create tblTest(
columns..
..
..
Gender int CONSTRAINT constraint_name DEFAULT 3,
..
..
..
)

Или используйте ALTER TABLE:

ALTER TABLE tblTest
ADD CONSTRAINT constraint_name 
DEFAULT 3
FOR Gender
McNets
источник
Я хочу назвать свое ограничение, которое было бы невозможно, если бы я сделал это в строке. Есть ли способ без использования встроенного или изменения таблицы оператора.
Дхрув Радж