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

Откуда: Киев
Сообщений: 587
Коллеги, кто сталкивался с фичей/багой:
select * from [information_schema ].[columns ]


Ошибок нет, данные выбираются. Проверял и на 2005 и на 2012 версии.
Это есть в документации?
2 июн 16, 16:25    [19250975]     Ответить | Цитировать Сообщить модератору
 Re: Провел в конце в названии идентификатора  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381
Ora Starter,

идентификаторы - это, внезапно, тоже строки. и для них действуют все правила сравнения строк (включая и правила коллейшенов).
при сравнении строк конечные пробелы не учитываются.
2 июн 16, 16:32    [19251015]     Ответить | Цитировать Сообщить модератору
 Re: Провел в конце в названии идентификатора  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
Парсер пробелы справа не учитывает.

SELECT * FROM [sys].[objects   ]
SELECT * FROM [sys].[   objects]

Второй стейтмент упадет по ошибке.

Вот простой пруфф, что пробелы справа отбрасываются:

IF OBJECT_ID('dbo.tbl', 'U') IS NOT NULL
    DROP TABLE dbo.tbl

CREATE TABLE dbo.[tbl   ] (ID INT)
GO
SELECT OBJECT_ID('dbo.tbl')
GO
CREATE TABLE dbo.[tbl] (ID INT)
GO

Относительно извращений, подобного рода приколов вполне достаточно:

SELECT 1FROM dbo.spt_values
SELECT ISNUMERIC('+')
SELECT ('+' * 1)
2 июн 16, 16:35    [19251038]     Ответить | Цитировать Сообщить модератору
 Re: Провел в конце в названии идентификатора  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
AlanDenton,

ну +/- и вроде $ для ISNUMERIC вполне объяснимы и вообщем-то, хотя да $ извращение :)
2 июн 16, 16:38    [19251062]     Ответить | Цитировать Сообщить модератору
 Re: Провел в конце в названии идентификатора  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381
daw,

в документации это когда-то упоминалось. еще в версии для 2008R2 есть.
https://msdn.microsoft.com/en-us/library/ms191529.aspx
Trailing blanks are ignored in comparisons; for example, these are equivalent:


ну, и это поведение согласно стандарту, в общем-то:
<comparison predicate>

If the length in characters of X is not equal to the length in characters of Y, then the shorter string is
effectively replaced, for the purposes of comparison, with a copy of itself that has been extended to
the length of the longer string by concatenation on the right of one or more pad characters, where the
pad character is chosen based on CS. If CS has the NO PAD characteristic, then the pad character is
an implementation-dependent character different from any character in the character set of X and Y
that collates less than any string under CS. Otherwise, the pad character is a <space>.
2 июн 16, 16:54    [19251171]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить