T-SQL中的大括号

T-SQL中的大括号,sql,sql-server,tsql,syntax,Sql,Sql Server,Tsql,Syntax,我遇到了以下t-sql: SELECT {d'9999-12-31'} 返回9999-12-31 00:00:00.000 这似乎是将字符串文字的类型转换为DATETIME。我找不到有关此语法的任何文档,我想知道是否有任何变体,例如,如果我有一个literal1,但想在BIGINT中表示它,而不使用CONVERT()/CAST() 有人能提供关于这个语法的更多信息吗?谢谢。这些是ODBC转义序列。有关更多详细信息,请参阅 UniqueIdentifier也有类似的语法 选择{guid'0000

我遇到了以下t-sql:

SELECT {d'9999-12-31'}
返回
9999-12-31 00:00:00.000

这似乎是将字符串文字的类型转换为
DATETIME
。我找不到有关此语法的任何文档,我想知道是否有任何变体,例如,如果我有一个literal
1
,但想在
BIGINT
中表示它,而不使用
CONVERT()
/
CAST()


有人能提供关于这个语法的更多信息吗?谢谢。

这些是ODBC转义序列。有关更多详细信息,请参阅

UniqueIdentifier也有类似的语法

选择{guid'00000000-0000-0000-0000-00000000'}

以及过程调用和一些其他详细的构造

关于您问题的其余部分,我不知道有任何方法可以将整数文本视为
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
返回

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

尝试
选择{i'9999-12-31'}
。如您所见,有一个错误声明,
i
不是ODBC日期/时间扩展的选项。试着用谷歌搜索类似的东西,这就是ODBC日期时间格式。谢谢@Martin。使用这种语法可能不是一个好主意,有什么原因吗?它是否比“标准”SQL更不兼容?@Tom-不知道。谷歌的“ODBC转义序列”带来了很多与SQL Server无关的东西,所以看起来实现起来相当标准,但我真的不知道更多!