¿Cómo agregar una restricción predeterminada al crear una tabla? Servidor SQL [cerrado]

12

Estoy tratando de crear una nueva tabla con columnas seguidas de su restricción como se muestra a continuación.

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

Sin embargo, recibo un mensaje de error cerca de la restricción predeterminada como,

'Sintaxis incorrecta cerca de' para ''

Dhruv Raj
fuente
Es posible que desee echar un vistazo a la documentación oficial de Microsoft SQL Server para la CREATE TABLE ...declaración. Tiene un error de sintaxis muy básico.
John aka hot2use

Respuestas:

20

Puede nombrar la restricción en línea:

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

Como CREATE TABLEmuestra la página msdn:

DEFAULT

... Para mantener la compatibilidad con versiones anteriores de SQL Server, se puede asignar un nombre de restricción a a DEFAULT.

En la misma página, podemos encontrar que las únicas opciones para <table_constraint>son PRIMARY KEY, FOREIGN KEYy CHECKlimitaciones:

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

así que si desea agregar una restricción predeterminada (nombrando o no) las únicas formas son hacerlo en línea o con una ALTER TABLEdeclaración.

ypercubeᵀᴹ
fuente
Quiero nombrar mi restricción, que no sería posible si lo hago en línea. ¿Hay alguna manera sin usar la instrucción en línea o alterar tabla?
Dhruv Raj
44
@DhruvRaj - es posible como lo muestra esta respuesta
Martin Smith
8

Sus comentarios sobre las otras dos respuestas afirman que no puede nombrar una restricción predeterminada al crearla "en línea". Ambas respuestas muestran que, de hecho, puede proporcionar un nombre para la restricción al crearla en línea. Agregaré un tercer ejemplo, que muestra los 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;

Esto muestra que el nombre de la restricción predeterminada es 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:

ingrese la descripción de la imagen aquí

Mirando el explorador de objetos en SSMS muestra el nombre:

ingrese la descripción de la imagen aquí

Max Vernon
fuente
2

Puede usar default valueen la definición de campo.

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

O use ALTER TABLE:

ALTER TABLE tblTest
ADD CONSTRAINT constraint_name 
DEFAULT 3
FOR Gender
McNets
fuente
Quiero nombrar mi restricción, que no sería posible si lo hago en línea. ¿Hay alguna manera sin usar la instrucción en línea o alterar tabla?
Dhruv Raj