Es la sintaxis inconsistente PK no agrupado creando?
-
29-09-2019 - |
Pregunta
SQL Server 2008 R2
¿Por qué
create table A
(
id int,
primary key nonclustered (id)
)
es correcta y ejecutarse sin errores?
Pero
create table A
(
id int,
primary key nonclustered id
)
es un error? dando
Sintaxis incorrecta cerca ')'.
pregunta colateral:
¿Por qué
create table c(id int primary key clustered)
se ejecuta
pero
create table c(id int primary key nonclustered)
es un error? Lo sentimos, ambos trabajan.
¿Es la sintaxis inconsistente para ser sugerido para la corrección?
Solución
El (id) debe estar en paréntesis. Al igual que consultar condiciones y columnas de clave externa. En una línea:
create table A (id int, primary key nonclustered (id)) --ok
create table A (id int, primary key nonclustered id) --not ok
Nota: la coma implica "nivel de restricción de tabla". El resto de la sintaxis sin los medios de coma "restricción a nivel de la columna". De PK del curso son por tabla, puede hacer que las claves compuestas, que no se pueden definir a nivel de columna:
create table A (
id int,
something datetime,
primary key clustered (id,something)
)
Nota: Siempre estaría explícito acerca de mis limitaciones también para los nombres. De lo contrario, SQL Server genera un hexágono looking. Así como definir explícitamente nulabilidad y el estilo de índice. Así que me gustaría escribir esto:
create table A (
id int NOT NULL,
something datetime NOT NULL,
CONSTRAINT PK_A PRIMARY KEY CLUSTERED (id,something)
)
Por último, según CREATE TABLE , esto está bien y las obras en mi ejemplo, SQL Server 2008:
create table c(id int primary key nonclustered)
Otros consejos
Los paréntesis son esenciales porque de lo contrario no habría manera de delimitar la lista de columnas de clave principal de lo que sigue (que podría ser una columna u otro obstáculo).