Значение TSql, предшествующее значению обратной косой черты - PullRequest
2 голосов
/ 18 октября 2019

Итак, я кое-что перебрал, набирая свои команды, и в итоге обнаружил, что предыдущая обратная косая черта перед именем столбца приводит к тому, что набор результатов возвращается в виде нулей - для нескольких типов данных.

Почему это так?

Например, крышка экрана:

enter image description here

Ответы [ 2 ]

3 голосов
/ 18 октября 2019

Похоже SELECT \ просто возвращает 0.00. Следующее имя столбца добавляется как метка, аналогичная использованию AS. Я не уверен, почему \ равно 0.00.

1 голос
/ 19 октября 2019

Ответ, полученный из комментариев, заключается в том, что SQL Server считает обратную косую черту символом валюты. Это можно наблюдать с результатами этого запроса, который возвращает нулевые значения типа money:

SELECT \ AS Backslash, ¥ AS Yen, $ AS Dollar;

Результаты:

+-----------+------+--------+
| Backslash | Yen  | Dollar |
+-----------+------+--------+
|      0.00 | 0.00 |   0.00 |
+-----------+------+--------+

Получение метаданных набора результатов с использованием sp_describe_first_result_set показываеттип money возвращается:

EXEC sp_describe_first_result_set N'SELECT \ AS Backslash, ¥ AS Yen, $ AS Dollar;';

Результаты (лишние столбцы опущены):

+-----------+----------------+-----------+-------------+----------------+------------------+------------+-----------+-------+
| is_hidden | column_ordinal |   name    | is_nullable | system_type_id | system_type_name | max_length | precision | scale |
+-----------+----------------+-----------+-------------+----------------+------------------+------------+-----------+-------+
|         0 |              1 | Backslash |           0 |             60 | money            |          8 |        19 |     4 |
|         0 |              2 | Yen       |           0 |             60 | money            |          8 |        19 |     4 |
|         0 |              3 | Dollar    |           0 |             60 | money            |          8 |        19 |     4 |
+-----------+----------------+-----------+-------------+----------------+------------------+------------+-----------+-------+

В этом случае поведение особенно неинтуитивно, поскольку SQL Server позволяет указывать валютупрефикс без суммы в качестве денежного литерала. Результирующее значение валюты равно нулю, если сумма не указана.

Эта статья в вики вызывает общую путаницу с обратной косой чертой и знаком йены. Это можно наблюдать из SSMS, выполнив запрос ниже, чтобы вернуть строковый литерал с обратной косой чертой. Например, когда результаты отображаются шрифтом MS Gothic, результирующий глиф символа будет ¥ (знак иены) вместо ожидаемой обратной косой черты:

SELECT '\' AS Backslash;

Результаты:

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