Como adicionar uma restrição padrão ao criar uma tabela? SQL Server [fechado]


12

Estou tentando criar uma nova tabela com colunas seguidas por suas restrições, como mostrado abaixo.

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

No entanto, estou recebendo uma mensagem de erro próxima à restrição padrão como,

'Sintaxe incorreta perto de' para ''


Você pode dar uma olhada na documentação oficial do Microsoft SQL Server para a CREATE TABLE ...declaração. Você tem um erro de sintaxe muito básico.
John aka hot2use 5/03

Respostas:


20

Você pode nomear a restrição em linha:

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

Como a CREATE TABLEpágina msdn mostra:

DEFAULT

... Para manter a compatibilidade com versões anteriores do SQL Server, um nome de restrição pode ser atribuído a um DEFAULT.

Na mesma página, podemos achar que as únicas opções para <table_constraint>são PRIMARY KEY, FOREIGN KEYe CHECKrestrições:

< 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 )   
}

portanto, se você deseja adicionar uma restrição padrão (nomear ou não), as únicas maneiras são fazê-lo de forma embutida ou com uma ALTER TABLEdeclaração.


Quero nomear minha restrição, o que não seria possível se eu fizesse isso em linha. Existe uma maneira de usar a instrução inline ou alterar tabela.
Dhruv Raj

4
@DhruvRaj - é possível, como mostra a resposta #
Martin Smith

8

Seus comentários nas outras duas respostas afirmam que você não pode nomear uma restrição padrão ao criá-la "inline". As duas respostas mostram que você pode, de fato, fornecer um nome para a restrição ao criá-la em linha. Vou adicionar um terceiro exemplo, mostrando os resultados.

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;

Isso mostra que o nome da restrição padrão é 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;

Resultados:

insira a descrição da imagem aqui

Observar o explorador de objetos no SSMS mostra o nome:

insira a descrição da imagem aqui


2

Você pode usar default valuena definição de campo.

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

Ou use ALTER TABLE:

ALTER TABLE tblTest
ADD CONSTRAINT constraint_name 
DEFAULT 3
FOR Gender

Quero nomear minha restrição, o que não seria possível se eu fizesse isso em linha. Existe uma maneira de usar a instrução inline ou alterar tabela.
Dhruv Raj
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.