Ответ, полученный из комментариев, заключается в том, что 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 |
+-----------+
| ¥ |
+-----------+