Як додати обмеження за замовчуванням під час створення таблиці? SQL Server [закрито]


12

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

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

Однак я отримую повідомлення про помилку поблизу обмеження за замовчуванням,

"Неправильний синтаксис біля" для ""


Ви можете ознайомитись з офіційною документацією 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, ім'я обмеження можна призначити a 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оператором.


Я хочу назвати своє обмеження, яке було б неможливим, якби я це зробив в ряді. Чи існує спосіб без використання вбудованого чи змінного оператора таблиці.
Dhruv Raj

4
@DhruvRaj - можливо, як показує ця відповідь
Мартін Сміт

8

Ваші коментарі до двох інших відповідей стверджують, що ви не можете назвати обмеження за замовчуванням, створюючи його "вбудованим". Обидві відповіді показують, що ви, власне, можете вказати ім’я обмеження, створюючи його в рядку. Додам третій приклад, показуючи результати.

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

Я хочу назвати своє обмеження, яке було б неможливим, якби я це зробив в ряді. Чи існує спосіб без використання вбудованого чи змінного оператора таблиці.
Dhruv Raj
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.