'的用法是什么\';和'$';在T-SQL中?

'的用法是什么\';和'$';在T-SQL中?,sql,sql-server,tsql,special-characters,Sql,Sql Server,Tsql,Special Characters,正如我在SQL Server书籍中发现的: \(反斜杠)(Transact-SQL) 为了便于阅读,将长字符串常量分成两行或多行 及 选择子句(Transact-SQL)$IDENTITY |$ROWGUID 和 $PARTITION(Transact-SQL) 返回为任何指定分区函数映射一组分区列值的分区号 在T-SQL特别是SQL Server中使用\和$ 现在,我有一个这样的问题: SELECT \ a, $ b, \11 c, $12 d; a | b | c |

正如我在SQL Server书籍中发现的:

\(反斜杠)(Transact-SQL)

为了便于阅读,将长字符串常量分成两行或多行

选择子句(Transact-SQL)
<代码>$IDENTITY |$ROWGUID

$PARTITION(Transact-SQL)

返回为任何指定分区函数映射一组分区列值的分区号

在T-SQL特别是SQL Server中使用
\
$

现在,我有一个这样的问题:

SELECT \ a, $ b, \11 c, $12 d;
a    | b    | c     | d 
-----+------+-------+-------
0.00 | 0.00 | 11.00 | 12.00
具有如下有效结果:

SELECT \ a, $ b, \11 c, $12 d;
a    | b    | c     | d 
-----+------+-------+-------
0.00 | 0.00 | 11.00 | 12.00
我觉得这个角色有些地方我找不到

编辑:
我发现,如果后面有一个数字,SQL Server将删除定义的符号,并将该值存储为货币数据类型:

我认为,SQL Server将单个货币符号转换为
+
-
-公式中的最后一个短语,仅在部分末尾,如
-$
($)
(12+$)
($)+12
($)+12
*(12-$)
,等等,而不是
$+1
2*$-1
。我还发现
$2
$2
相同


所有上述行为对于
\
都是相同的,这意味着SQL Server认为
\
是一个货币符号

我想检查一下数据类型,每个都返回数据类型money

WITH CTE
AS
(
    SELECT \ a, $ b, \11 c, $12 d   
)

SELECT  SQL_VARIANT_PROPERTY(a,'baseType') a,
        SQL_VARIANT_PROPERTY(b,'baseType') b,
        SQL_VARIANT_PROPERTY(c,'baseType') c,
        SQL_VARIANT_PROPERTY(d,'baseType') d
FROM CTE
结果:

a                              b                              c                              d
------------------------------ ------------------------------ ------------------------------ ------------------------------
money                          money                          money                          money

此处反斜杠不是字符串常量的一部分,因此记录的行为不适用。T-SQL解析器并不严格,因此有时允许解释格式错误的文本和语句。当然,依赖这种未记录的行为是脆弱的,因为这种行为可能随时改变并破坏代码。“这意味着SQL Server认为``是一种货币符号!!!”——这可能与历史上,广泛使用的大多数与美国ASCII兼容的日文编码将日元符号放在代码点上,这在美国ASCII中是反斜杠。仍有一些字体将反斜杠表示为日元符号。这可能是OP或任何愿意回答问题的人的起点:@hvd支持您的论点,
$
\
的解析方式似乎相同。