Миграция с SQL2000 на SQL2017 - изменения синтаксиса
Всем привет,
Я провел некоторые поиски, но не нашел ничего особенного, поэтому подумал, что один из вас, умных людей, мог бы сделать это сам и, возможно, сделать некоторые заметки..
У нас есть несколько древних приложений VB legacy, работающих на SQL2000, и мы намерены перейти на SQL2017.
Теперь я знаю, что уровень совместимости остановит нас в наших треках, однако весь код создания таблиц и определения полей, а также отношения и индексы кодируются внутри самого приложения, то есть если я хочу создать новую базу данных для нашего клиента, у нас есть набор шаблонов создания таблиц, создания индексов и отношений и т. д... поэтому я с удовольствием экспортирую данные из 2000 года в Unicode CSV с помощью кода.
Затем запустите код create database .net в SQL2016, чтобы наши таблицы, индексы и отношения были воссозданы с пустым содержимым, а затем импортируйте каждую таблицу обратно в 2017 год, очевидно, используя новые имена типов данных, где они изменились.
По крайней мере, это то, что я имею в виду - моя проблема заключается в различиях между синтаксисом команд SQL - мы не используем процедуры или что-то, что связано с SQL Server, " все " работает с VB6 или VB.NET код через ADODB или OLEDB, поэтому единственное, что я ищу (если я нахожусь на правильном пути), - это изменения в самом нашем SQL-коде при выполнении выбора по нашим собственным таблицам, например
Выберите топ-10 * из mytable
вероятно, теперь SELECT * FROM MyTable LIMIT 10 OFFSET 0
но есть ли другие изменения - такие как правые соединения, приведение, преобразование, случай когда.
Мы также не используем BLOB - объекты, и я знаю, что некоторые из наших типов данных будут отличаться, ntext, по - моему, теперь nvarchar(max), нам не нужно ставить N' для вставки или обновления текстовых данных поля unicode-есть ли другие-есть ли шпаргалка, которую кто-то знает о перечислении всех синтаксических различий. Я знаю, что, вероятно, не смогу подключиться к sql server 2017 через ADO, но мне нужно использовать ODBC, который медленнее подключается, но, по крайней мере, он будет продолжать работать до тех пор, пока мы не будем полностью совместимы с OLEDB.
Есть какие-нибудь мысли по этому поводу или предложения, которые я мог бы пропустить?
Что я уже пробовал:
еще не пробовал! просто пытаюсь немного спланировать
ZurdoDev
Я бы предложил просто попробовать и посмотреть, что получится.
Вам не нужно использовать LIMIT в верхнем операторе. Вы также можете оставить N' для своих струн. Я бы ничего не стал менять, если бы он не был сломан. Это всего лишь я.
Member 12561559
Извините, я бы поставил предел в конце оператора, но убрал бы верхний N из оператора. Судя по всему, не так уж много нужно сделать ! Спасибо за Ваш вклад
Richard Deeming
- нам не обязательно ставить N'
для того, чтобы вставить или обновить Юникод поля текстовых данных"
Вы это делаете, но только если вы используете конкатенацию строк для построения своих запросов, что оставит вас открытым для SQL-инъекции.
Используйте параметризованные запросы, и вам не придется беспокоиться об этом.
Все, что вы хотели знать о SQL-инъекции (но боялись спросить) | Трой Хант[^]
Как я могу объяснить SQL-инъекцию без технического жаргона? | Обмен Стеками Информационной Безопасности[^]
Шпаргалка по параметризации запросов | OWASP[^]
"Я знаю, что, вероятно, не смогу подключиться к sql server 2017 через ADO"
Я не понимаю, почему возникла бы какая-то проблема с использованием ADO для подключения:
Использование ADO с собственным клиентом SQL Server[^]
Member 12561559
Извините, я хотела сказать, я бы ушел оттуда в N части, т. е. АВС обновить набор mytext=Н'some символы Unicode', чтобы обновить набор Азбука mytext='какой-то текст в юникоде будет штраф за Юникода теперь - ура
Richard Deeming
Нет, не будет. Ты все еще нуждаешься в этом N'
префикс для текста в Юникоде; в противном случае он будет преобразован в ANSI с помощью кодовой страницы по умолчанию, а затем преобразован обратно в искаженный Юникод.
Но если вы используете параметры, вы полностью избегаете этой проблемы, а также защищаете себя от SQL-инъекций.
Richard Deeming
Member 12561559
Спасибо, Ричард! Очень ценю