Chaves curvas em T-SQL

Eu me deparei com o seguinte t-sql:

SELECT {d'9999-12-31'} 

Que retorna 9999-12-31 00:00:00.000 .

Isso parece estar convertendo o tipo da string literal em DATETIME . Não consigo encontrar nenhuma documentação sobre esta syntax e estou querendo saber se há alguma variação, por exemplo, se eu tenho um literal 1 mas quero representar isso em um BIGINT sem usar CONVERT() / CAST() .

Alguém pode fornecer mais informações sobre esta syntax? Obrigado.

Estas são seqüências de escape ODBC. Veja Sequências de Escape de Data, Hora e Timestamp para mais detalhes.

Há também uma syntax semelhante para identificadores exclusivos

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

bem como chamadas de procedimento e algumas outras construções detalhadas fora desse link.

Com relação ao restante da sua pergunta, não estou ciente de nenhuma maneira de ter um literal inteiro tratado como bigint ou de qualquer recurso específico que liste todas as maneiras de influenciar como os literais são atribuídos a tipos de dados pelo SQL Server. Algumas formas estão abaixo.

 ;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 

Retorna

 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 
    Intereting Posts