Запрос связанного сервера SQL Server 2005 не возвращает ожидаемой ошибки - PullRequest
1 голос
/ 07 октября 2010

Я запрашиваю связанный SQL Server и не получаю сообщение об ошибке при локальном запросе.

Примерно так:

ВЫБРАТЬ CAST (ColumnName AS INT) ИЗ TableName

и это:

ВЫБЕРИТЕ CAST (ColumnName AS INT) ОТ ServerName.DatabaseName.Schema.TableName

Первый запрос при локальном запуске возвращает ошибку «Ошибка арифметического переполнения при преобразовании выражения в тип данных int.» потому что некоторые значения находятся вне диапазона.

Однако второй запрос, запущенный с другого сервера, просто возвращает все «допустимые» строки.

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

Заранее спасибо.

1 Ответ

0 голосов
/ 07 октября 2010

Посмотрите на опции SET ARITHABORT и SET ANSI_WARNINGS. Когда оба выключены, ошибка переполнения будет подавлена, и вместо этого будет возвращено значение NULL. Они могут быть установлены (как минимум) в трех разных местах: соединение, база данных или код. Это означает, что иногда вы можете получить непредвиденное поведение, потому что кто-то установил параметр базы данных и забыл об этом, или кто-то использует библиотеку подключений, которая по умолчанию устанавливает некоторые параметры по-разному. Больше информации здесь:

http://msdn.microsoft.com/en-us/library/ms191203(v=SQL.90).aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...