2016-08-19 3 views
3

En plus d'envelopper mon littéral dans une fonction CONVERSION, existe-t-il un moyen de spécifier que je veux, par ex. 12345 représenté comme un BIGINT et pas un INT? En C#, je pourrais spécifier 12345L, mais je ne suis pas au courant des fonctionnalités équivalentes dans T-SQL.Comment spécifier un littéral BIGINT dans T-SQL?

+0

Vous pouvez le CAST. Autre que l'emballage de N'value que vous pouvez utiliser pour unicode, je suis à peu près sûr qu'il n'y a pas de wraps comme ça pour les valeurs numériques. – dfundako

+0

@dfundako voir wraps pour d'autres types tels que float et argent [ici] (https://msdn.microsoft.com/en-us/library/ms179899.aspx). –

+0

Par curiosité, dans quel contexte êtes-vous préoccupé par un littéral de chaîne interprété comme un int au lieu d'un bigint? D'un point de vue de la sabilité, si vous essayez de faire quelque chose comme 'where [bigIntColumn] = 123', cela convertira implicitement la chaîne littérale 123 en un bigint, puis fera la comparaison. –

Répondre

2

Vous devez déclarer explicitement ou transtyper dans un bigint.

Bien qu'il existe prefixes and symbols for some other datatypes (binaire, float, money, etc.), je ne pense pas qu'il existe un moyen de faire cela dans T-SQL pour bigint qui n'implique pas explicitement de déclarer le bigint ou de lancer/convertir à elle.

En fait, au moins pour une opération select...into, SQL Server utilisera un type de données numérique (décimal) une fois que vos littéraux entiers vont au-delà de ce qui peut être stocké dans un int.

select 2000000000 as col into test; 
select * from information_schema.columns where table_name = 'test'; 
-- DATA_TYPE: int 
drop table test; 

select 3000000000 as col into test; 
select * from information_schema.columns where table_name = 'test'; 
-- DATA_TYPE: numeric 
drop table test; 

select cast(3000000000 as bigint) as col into test; 
select * from information_schema.columns where table_name = 'test'; 
-- DATA_TYPE: bigint 
drop table test; 

declare @col bigint = 3000000000; 
select @col as col into test; 
select * from information_schema.columns where table_name = 'test'; 
-- DATA_TYPE: bigint 
drop table test; 
2
declare @var as bigint 
set @var = 12345 
0

Vous pouvez utiliser décimal ou hexadécimal littéral comme:

declare @variable bigint 
set @variable = 0x7FFFFFFFFFFFFFFF 
select @variable 
set @variable = 9223372036854775807 
select @variable 
+0

Pas vraiment, cela rend un varbinary: SELECT (0x761CC659 + 0x11E1A300) – Chris

0
select cast(1 as bigint) 

OIEau vous simplement jeter votre valeur. A quoi cela servirait il?

+0

Je peux penser à une douzaine de cas d'utilisation. Mais, en voici une simple: SELECT POWER (256,5) va échouer sauf si je convertis explicitement (ou CAST par exemple) 256 en bigint comme dans SELECT POWER (CONVERT (bigint, 256), 5). – Jason

+0

Je vois, l'analyseur T-SQL n'est pas assez intelligent. Une façon serait de faire: sélectionner la puissance (256.0,5); –