¿Eliminar 'OPTIMIZE_FOR_SEQUENTIAL_KEY' resolvería la falla de mi script.sql o es más complicado (SQL Server Express DB -> SQL Server)?
Estoy tratando de configurar mi base de datos SQL Server Express en mi sitio de alojamiento (GoDaddy / Plesk) como una base de datos SQL Server completa, pero me he encontrado con una serie de mensajes de error al ejecutar el archivo script.sql.
Estoy siguiendo los pasos aquí para configurar mi base de datos, primero ejecutando mi archivo script.sql dentro de MSSMS mientras estoy conectado al servidor remoto.
Había tenido problemas para conectarme, pero finalmente pude al omitir el número de puerto, como lo recomienda seanb aquí :
... pero tengo estos err msgs al ejecutar el archivo de script:
¿Es esto porque mi base de datos es SQL Server Express, y está tratando de crear una base de datos de SQL Server (estándar / regular) y 'OPTIMIZE_FOR_SEQUENTIAL_KEY' se refiere a SQL Server / TSQL "normal"?
Si es así (o en cualquier caso), ¿qué debo hacer para que se ejecute el script sql?
Para un poco más de detalle, todas las quejas son "'OPTIMIZE_FOR_SEQUENTIAL_KEY' no es una opción reconocida de CREATE TABLE". excepto uno, que es:
Sintaxis incorrecta cerca de la palabra clave "con". Si esta declaración es una expresión de tabla común, una cláusula de espacios de nombres xml o una cláusula de contexto de seguimiento de cambios, la declaración anterior debe terminar con un punto y coma.
En cuanto al problema "OPTIMIZE_FOR_SEQUENTIAL_KEY", aquí está el primer lugar donde se queja:
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY],
... y en cuanto a "Sintaxis incorrecta cerca de la palabra clave 'con'", aquí es donde ocurre:
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
En otras palabras, es exactamente el mismo TSQL, pero se aplica a diferentes columnas y causa diferentes mensajes de error: el primero se queja de "OPTIMIZE" y el segundo simplemente se queja vagamente de algo cercano a "WITH".
Aquí están en contexto:
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY],
CONSTRAINT [CK_ACTORS_Column] UNIQUE NONCLUSTERED
(
[ActorId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
Estoy tentado a simplemente eliminar todas las declaraciones "OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF" e intentarlo de nuevo; ¿Sería seguro hacer eso?
Respuestas
Su servidor SQL de destino es simplemente una versión anterior. Es SQL Server 2014 SP3 CU4 para ser exactos, y OPTIMIZE_FOR_SEQUENTIAL_KEY es una característica nueva en SQL Server 2019. Las secuencias de comandos SSMS siempre recitan todas las opciones, incluso cuando se configuran en el valor predeterminado para garantizar secuencias de comandos de fidelidad total, lo que a veces es un dolor.
Simplemente puede eliminar esa opción y el script debería ser compatible con SQL 2014. De hecho, puede eliminar todas esas opciones si no ha establecido ninguna en un valor no predeterminado.
O vea si su proveedor de alojamiento tiene SQL Server 2019 disponible. O actualiza tu hoster :)