A remoção de 'OPTIMIZE_FOR_SEQUENTIAL_KEY' resolveria a falha do meu script.sql ou está mais envolvida (SQL Server Express DB -> SQL Server)?
Estou tentando configurar meu banco de dados SQL Server Express em meu site de hospedagem (GoDaddy / Plesk) como um banco de dados SQL Server completo, mas recebo uma série de mensagens de erro ao executar o arquivo script.sql.
Estou seguindo as etapas aqui para configurar meu banco de dados, primeiro executando meu arquivo script.sql dentro do MSSMS enquanto conectado ao servidor remoto.
Eu estava tendo problemas para conectar, mas finalmente consegui omitindo o número da porta, conforme recomendado pelo seanb aqui :
... mas recebi estas mensagens erradas ao executar o arquivo de script:
Isso ocorre porque meu banco de dados é SQL Server Express e está tentando criar um banco de dados SQL Server (padrão / regular) e 'OPTIMIZE_FOR_SEQUENTIAL_KEY' está se tornando SQL Server / TSQL "normal"?
Se sim (ou em qualquer caso), o que preciso fazer para que o script sql seja executado?
Para um pouco mais de detalhes, todas as reclamações são "'OPTIMIZE_FOR_SEQUENTIAL_KEY' não é uma opção CREATE TABLE reconhecida." exceto por um, que é:
Sintaxe incorreta perto da palavra-chave 'com'. Se esta instrução for uma expressão de tabela comum, uma cláusula xmlnamespaces ou uma cláusula de contexto de controle de alterações, a instrução anterior deve ser encerrada com um ponto e vírgula.
Quanto ao problema "OPTIMIZE_FOR_SEQUENTIAL_KEY", aqui está o primeiro lugar onde isso é reclamado:
)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],
... e quanto a "Sintaxe incorreta perto da palavra-chave 'com'", aqui é onde ocorre:
)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]
Em outras palavras, é exatamente o mesmo TSQL, mas sendo aplicado a colunas diferentes e causando mensagens de erro diferentes - o primeiro reclamando de "OTIMIZAR" e o segundo simplesmente reclamando vagamente de algo próximo a "COM"
Aqui estão eles no 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]
Estou tentado a simplesmente remover todas as instruções "OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF" e tentar novamente; seria seguro fazer isso?
Respostas
Seu SQL Server de destino é simplesmente uma versão mais antiga. É SQL Server 2014 SP3 CU4 para ser exato, e OPTIMIZE_FOR_SEQUENTIAL_KEY é um novo recurso no SQL Server 2019. O script SSMS sempre recita todas as opções, mesmo quando definido para o valor padrão para garantir o script de fidelidade total, o que às vezes é uma dor.
Você pode simplesmente remover essa opção e o script deve ser compatível com o SQL 2014. Na verdade, você pode remover todas essas opções se não tiver definido nenhuma com um valor não padrão.
Ou veja se seu hoster tem o SQL Server 2019 disponível. Ou atualize seu hoster :)