Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Неоднозначность с set ansi_padding off  [new]
marse
Member

Откуда:
Сообщений: 112
автор
Microsoft SQL Server 2008 (SP3) - 10.0.5500.0 (X64) 
	Sep 21 2011 22:45:45 
	Copyright (c) 1988-2008 Microsoft Corporation
	Enterprise Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)


set ansi_padding off
go
select case 1
             when 1
             then 'xxx '
             when 2
             then 'zzzz '
             else ''
           end + 'USD',
    case 2
             when 1
             then 'xxx '
             when 2
             then 'zzzz '
             else ''
           end + 'USD'
go
set ansi_padding on
go


Должно быть:
Замыкающие пробелы в символьных значениях, вставляемых в столбец varchar, усекаются. Замыкающие нули в двоичных значениях, вставляемых в столбец varbinary, усекаются.


Результат
xxxUSD	zzzz USD


Почему же case 1 - усекает, а case 2 не усекает пробелы?
Чувствуется некоторая неоднозначность с этим set ansi_padding off.

ЗЫ: про это знаю
BOL
Важно!
В будущей версии Microsoft SQL Server параметр ANSI_PADDING всегда будет иметь значение ON, а любые приложения, явно устанавливающие значение параметра равным OFF, приведут к ошибке. Избегайте использования этого свойства в новых разработках и запланируйте модификацию приложений, которые сейчас ее используют.

пишу, чтоб другие не напаролись.
9 ноя 12, 13:17    [13445765]     Ответить | Цитировать Сообщить модератору
 Re: Неоднозначность с set ansi_padding off  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37069
Это не неоднозначтность. Это просто кто-то ленится указывать нужный тип строковым литералам, а потом удивляется, что сервер угадал неверно.
9 ноя 12, 13:21    [13445815]     Ответить | Цитировать Сообщить модератору
 Re: Неоднозначность с set ansi_padding off  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
marse,

речь в цитате идёт о вставке в поля таблицы, в момент создания которой было ansi_padding off.
Поэтому, как минимум, цитата не соответствует примеру с литеральными строками.
9 ноя 12, 13:21    [13445822]     Ответить | Цитировать Сообщить модератору
 Re: Неоднозначность с set ansi_padding off  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37069
И да, где здесь вставка в столбцы?
9 ноя 12, 13:23    [13445841]     Ответить | Цитировать Сообщить модератору
 Re: Неоднозначность с set ansi_padding off  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37069
Кстати, при изменении настройки, поведение меняется. Так что явный конверт литералов - и никаких проблем.
9 ноя 12, 13:24    [13445856]     Ответить | Цитировать Сообщить модератору
 Re: Неоднозначность с set ansi_padding off  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
iap
marse,

речь в цитате идёт о вставке в поля таблицы, в момент создания которой было ansi_padding off.
Поэтому, как минимум, цитата не соответствует примеру с литеральными строками.
Простите, приврал.
Вместо создания таблицы речь должна идти о создании поля таблицы
9 ноя 12, 13:25    [13445863]     Ответить | Цитировать Сообщить модератору
 Re: Неоднозначность с set ansi_padding off  [new]
marse
Member

Откуда:
Сообщений: 112
Гавриленко Сергей Алексеевич
Кстати, при изменении настройки, поведение меняется. Так что явный конверт литералов - и никаких проблем.


Помогает даже конверт одного литерала.
Да ктож такое делать будет, пока не напорится на ошибку! :)
9 ноя 12, 13:28    [13445903]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить