2011-06-01 17 views
11

¿Alguien puede decirme si la instrucción IDENTITY NOT NULL en una creación de tabla es redundante o no? Quiero decir, a juzgar por el mensajeIDENTIDAD NOT NULL en Table Creation

DEFAULT o NULL no están permitidos como valores de identidad explícitos.

Yo diría que cualquier columna declarada como IDENTITY también está implícitamente declarada como NOT NULL, pero me gustaría asegurarme. ¿Alguien puede confirmar?

Muchas gracias.

+0

La pregunta parece ser: "Si hay algo que está implícito, se declara explícitamente que 'redundante'?" La respuesta parece ser subjetiva. ¿Declarar 'NOT NULL' en una columna que comprende la' PRIMARY KEY' redundante? Si la acción referencial 'NO ACTION' es siempre redundante, ¿por qué existe? – onedaywhen

Respuesta

8

SQL Server no agrega limitación NULL a las columnas de identidad automáticamente apesar de que no speficy que al crear una tabla

Considere la siguiente secuencia de comandos de la tabla

create table test(id int identity(1,1), name varchar(1000)) 

Ahora generar el script de la mesa de estudio de la gerencia . Se genera el script como

CREATE TABLE [dbo].[test](
    [id] [int] IDENTITY(1,1) NOT NULL, 
    [name] [varchar](1000) NULL 
) ON [PRIMARY] 

Eventhough NO limitación NULL no está especificado en el guión de mesa de forma predeterminada se agrega. La columna de identidad nunca será NULL. Por lo tanto, se agrega la restricción NOT NULL predeterminada

+1

Si no especifica NULL o NOT NULL, SQL establecerá una columna de identidad como NOT NULL. Yo, siempre lo especifico, para evitar la confusión endémica de la existencia de los comandos 'SET ANSI_NULL_DFLT_OFF' y' SET ANSI_NULL_DFLT_ON'. –

1

SQL Server (2008, y probablemente también las versiones anteriores) no le permitirá crear una columna de identidad en una columna NULL. Inténtelo:

CREATE TABLE Foo1 
(
    FooId int identity not null 
    ,Data varchar(20) not null 
) 

obras, donde

CREATE TABLE Foo2 
(
    FooId int identity null 
    ,Data varchar(20) not null 
) 

genera mensaje de error Could not create IDENTITY attribute on nullable column 'FooId', table 'Foo2'.

+0

En última instancia, su respuesta implica que NOT NULL es una especie de implícita. :) –

+1

Sí, me di cuenta de eso más tarde, después de agregar el comentario a la publicación de @ Pranay. Mi versión general de la codificación es evitar siempre el uso de "código implícito". Nunca suponga que SQL hará lo que usted cree que ** debería ** hacer, sino más bien tome el esfuerzo adicional (de, por ejemplo, escribir "no nulo") para que quede claro en las instrucciones que le da a la computadora. –

Cuestiones relacionadas