Мы столкнулись со странной ошибкой в нашем приложении на сайте клиента. Нам удалось сузить ее до точки, где мы можем воспроизвести поведение, используя только Management Studio и SQL Server.
У нас есть две машины, А и Б:
+-----------+ +--------------------+ | [А] | | [Б] | | Управление | --------------> | SQL Server 2008 R2 | | Студия | | Предприятие x64 | +-----------+ +--------------------+
Мы запускаем скрипт SQL в Management Studio на машине A для экземпляра SQL Server на машине B.На самом деле мы не выполняем скрипт, а просто анализируем его.
В большинстве случаев операция синтаксического анализа работает нормально. Иногда (по-видимому, случайно) операция синтаксического анализа завершается с ошибкой синтаксиса. Сообщение об ошибке показывает часть скрипта с ошибкой, которая выглядит как некий SQL из исходного скрипта, который был усечен и к которому были добавлены случайные символы.
Пример:
Исходный SQL:
SELECT DISTINCT ST.TABLE_NAME as TableName
FROM INFORMATION_SCHEMA.TABLES AS ST
INNER JOIN INFORMATION_SCHEMA.COLUMNS AS SC
ON SC.TABLE_NAME = ST.TABLE_NAME
WHERE ST.TABLE_TYPE = 'BASE TABLE'
AND SC.COLUMN_NAME = 'Identity'
AND ST.TABLE_NAME != 'dtproperties'
ORDER BY ST.TABLE_NAME
SQL-код, содержащий ошибку (согласно сообщению SQL Server):
SELECT DISTINCT ST.TABLE_NAME as TableName
FROM INFORMATION_SCHEMA.TABLES AS ST
INNER JOIN INFORMATION_SCHEMA.COLUMNS AS SC
ON SC.TABLE_NAME = Sā怊
В приведенном выше примере показано, как повреждается запрос. Это происходит не всегда, и не всегда это тот же фрагмент SQL, который вызывает ошибку. Анализ этого скрипта с другим экземпляром SQL Server не выдает ошибок, что показывает, что скрипт в порядке.
Этопоявляетсячто что-то повреждает SQL, который принимается сервером. Это заставляет меня думать, что проблема заключается либо в клиентской части, либо в передаче SQL от клиента к серверу. У меня есть трассировка SQL с того периода, когда произошла ошибка, которая показывает, что SQL был поврежден, когда SQL Server его получил.
Мы не смогли отследить возможную причину такого поведения, и поэтому не можем найти исправление. Поскольку ошибки возникают, по-видимому, случайным образом, также очень сложно сгенерировать шаги воспроизведения для отправки отчета об ошибке.
Есть идеи?
решение1
Вытащите SQL Server. Время для тщательной проверки системы. Память (компьютера, но, возможно, и сетевой карты) может быть виновником. Я бы ожидал увидеть появление ошибок памяти.