Как заставить SQL Azure принимать DMY в строке запроса? - PullRequest
1 голос
/ 17 июня 2011

У нас есть ряд устаревших приложений, которые мы пытаемся перенести в SQL Azure.Приложения написаны на классическом ASP с большим количеством строковых запросов.Есть много, чтобы переписать, чтобы оно стоило мигрировать.

Любые запросы с датами не выполняются, так как запросы строки SQL используют формат UK DMY.Пользователь и база данных SQL Azure, похоже, не могут использовать американский английский формат.

Если я добавлю SET DATEFORMAT dmy;перед строкой запроса запрос затем работает.Однако для этого необходимо изменить тысячи запросов.Есть ли способ заставить SQL Azure использовать формат DMY как часть строки подключения?Это или какое-то другое решение, которое спасает нас от переписывания тысяч запросов?Любой способ установить логин, чтобы всегда использовать формат DMY или чтобы вся БД использовала DMY и т. Д.?

Спасибо

Graeme

Ответы [ 2 ]

1 голос
/ 18 июня 2011

Я думаю, что Ричард предлагал что-то вроде этого:

Оригинальный код:

Dim rs
Set rs = Server.CreateObject("ADO.Recordset")
... recordset shiznit ...
Set rs = nothing

Новый код:

Dim rs
Set rs = New cHomegrownAdoRecordsetWrapper
... same unchanged recordset shiznit ...
Set rs = nothing

Если код в VBScriptТем не менее, вам будет трудно реализовать это.

Первая проблема, с которой вы столкнетесь [если вы попытались сделать это изначально в VBScript], заключается в том, что объект ADO Recordset интенсивно использует необязательные аргументы в своемметоды, и вы просто не можете создать функцию (или метод класса) в VBScript, который имеет необязательные аргументы.Поэтому вы не сможете подклассы ничего полезного.

Возможно, вы можете создать подкласс объекта набора записей ADo в JScript - можно смешивать и сопоставлять оба языка в одном и том же скрипте, используя одну и ту же страницу;просто поймите, что все, что является JScript, будет выполнено первым, независимо от того, где оно находится на странице.Сначала ASP запускает интерпретатор JScript, а затем - интерпретатор VBScript.

Возможно, вы также сможете создать свою собственную библиотеку DLL на основе Com, которая обернет объект ADO ... но вам придется исследовать это самостоятельно.

Сейчас.

Если бы это был я, я бы серьезно посмотрел на поиск и замену, в зависимости от того, насколько последовательный код.

Если вы можете получить код до точки, где встроенные запросы используют «dd FullMonthName YYYY», то есть однозначный формат даты, вам не нужно беспокоиться о проблеме DMY с базой данных, икод сохранится в любой версии SQL, с которой он работает.

Пока даты имеют текстовое название месяца и полный год, SQL не имеет значения, в каком порядке они находятся.

Я подозреваю, что вы могли бы даже взять идею Ричарда в меньшем масштабе и поместить функцию-обертку везде, где есть встроенная дата, немного понюхать время выполнения и заставить все работать снова.

1 голос
/ 17 июня 2011

Вы можете создать подкласс самого соединения, чтобы при отправке команды ему предшествовала команда SET DATEFORMAT. Это повлечет за собой рефакторинг вашего движка, но это может быть достигнуто путем поиска-замены.

...