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?

¿Fue útil?

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top