T-SQL中的大括号

Tom*_*ter 30 sql t-sql sql-server syntax

我遇到过以下t-sql:

SELECT {d'9999-12-31'}
Run Code Online (Sandbox Code Playgroud)

哪个回报9999-12-31 00:00:00.000.

这似乎是将字符串文字的类型转换为a DATETIME.我找不到关于这种语法的任何文档,我想知道是否有任何变化,例如,如果我有一个文字,1但想要在BIGINT不使用CONVERT()/ 的情况下表示CAST().

有人能提供有关此语法的任何进一步信息吗?谢谢.

Mar*_*ith 47

这些是ODBC转义序列.有关详细信息,请参阅日期,时间和时间戳转义序列.

uniqueidentifiers也有类似的语法

SELECT {guid '00000000-0000-0000-0000-000000000000'},

以及过程调用和其他一些详细说明该链接的结构.

关于你的问题的其余部分,我不知道有任何方法将整数文字视为一个bigint或任何特定资源,列出了影响SQL Server如何为文字分配数据类型的所有方法.有些方法如下.

;WITH cte(thing) AS
(
SELECT CAST(1 AS SQL_VARIANT) UNION ALL
SELECT $1 UNION ALL
SELECT 1e0 UNION ALL
SELECT 1.0000 UNION ALL
SELECT 2147483648 UNION ALL 
SELECT {ts '2011-09-15 01:23:56.123'}  UNION ALL
SELECT {d '2011-09-15'} UNION ALL
SELECT { t '13:33:41' }  UNION ALL
SELECT {guid '00000000-0000-0000-0000-000000000000'} UNION ALL
SELECT 'Foo' UNION ALL
SELECT N'Foo'
)
SELECT thing, 
       sql_variant_property(thing,'basetype') AS basetype,
       sql_variant_property(thing,'precision') AS precision, 
       sql_variant_property(thing,'scale') AS scale, 
       sql_variant_property(thing,'maxlength') AS maxlength
FROM cte
Run Code Online (Sandbox Code Playgroud)

返回

thing                          basetype            precision   scale  maxlength
------------------------------ ------------------- ----------- ------ ---------
1                              int                 10          0      4
1.00                           money               19          4      8
1                              float               53          0      8
1.0000                         numeric             5           4      5
2147483648                     numeric             10          0      5
2011-09-15 01:23:56.123        datetime            23          3      8
2011-09-15 00:00:00.000        datetime            23          3      8
2011-09-15 13:33:41.000        datetime            23          3      8
00000000-0000-0000-0000-000000 uniqueidentifier    0           0      16
Foo                            varchar             0           0      3
Foo                            nvarchar            0           0      6
Run Code Online (Sandbox Code Playgroud)