Устранит ли удаление OPTIMIZE_FOR_SEQUENTIAL_KEY отказ моего скрипта script.sql или больше (SQL Server Express DB -> SQL Server)?

Oct 23 2020

Я пытаюсь настроить свою базу данных SQL Server Express на моем хостинг-сайте (GoDaddy / Plesk) как полноценную базу данных SQL Server, но при запуске файла script.sql я обнаружил серию сообщений об ошибках.

Я следую приведенным здесь инструкциям, чтобы настроить свою БД, сначала запустив файл script.sql внутри MSSMS при подключении к удаленному серверу.

У меня были проблемы с подключением, но я наконец смог это сделать, не указав номер порта, как рекомендовано здесь seanb :

... но я получил эти сообщения об ошибках при запуске файла сценария:

Это потому, что моя БД - это SQL Server Express, и она пытается создать базу данных SQL Server (стандартную / обычную), а OPTIMIZE_FOR_SEQUENTIAL_KEY использует «обычный» SQL Server / TSQL?

Если да (или в любом случае), что мне нужно сделать, чтобы запустить sql-скрипт?

Для более подробной информации, все жалобы: «OPTIMIZE_FOR_SEQUENTIAL_KEY не является распознанной опцией CREATE TABLE». кроме одного, а именно:

Неправильный синтаксис рядом с ключевым словом "с". Если этот оператор является общим табличным выражением, предложением xmlnamespaces или предложением контекста отслеживания изменений, предыдущий оператор должен заканчиваться точкой с запятой.

Что касается проблемы «OPTIMIZE_FOR_SEQUENTIAL_KEY», вот первое место, на которое жалуются:

)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],

... а что касается "Неправильный синтаксис рядом с ключевым словом 'with'", вот где это происходит:

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

Другими словами, это тот же самый TSQL, но он применяется к разным столбцам и вызывает разные сообщения об ошибках: первый жалуется на "OPTIMIZE", а второй просто неопределенно жалуется на что-то рядом с "WITH"

Вот они в контексте:

[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]

У меня возникает соблазн просто удалить все инструкции «OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF» и попробовать еще раз; было бы безопасно это сделать?

Ответы

2 DavidBrowne-Microsoft Oct 23 2020 at 16:10

Ваш целевой SQL Server - это просто более старая версия. Если быть точным, это SQL Server 2014 SP3 CU4, а OPTIMIZE_FOR_SEQUENTIAL_KEY - это новая функция в SQL Server 2019. Сценарии SSMS всегда повторяют все параметры, даже если установлено значение по умолчанию для обеспечения полной точности сценариев, что иногда вызывает боль.

Вы можете просто удалить эту опцию, и сценарий должен быть совместим с SQL 2014. Фактически вы можете удалить все эти опции, если вы не установили для них значение, отличное от значения по умолчанию.

Или посмотрите, есть ли у вашего хостера SQL Server 2019. Или обновите хостера :)