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?
Répondre
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;
declare @var as bigint
set @var = 12345
Vous pouvez utiliser décimal ou hexadécimal littéral comme:
declare @variable bigint
set @variable = 0x7FFFFFFFFFFFFFFF
select @variable
set @variable = 9223372036854775807
select @variable
Pas vraiment, cela rend un varbinary: SELECT (0x761CC659 + 0x11E1A300) – Chris
select cast(1 as bigint)
OIEau vous simplement jeter votre valeur. A quoi cela servirait il?
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
Je vois, l'analyseur T-SQL n'est pas assez intelligent. Une façon serait de faire: sélectionner la puissance (256.0,5); –
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
@dfundako voir wraps pour d'autres types tels que float et argent [ici] (https://msdn.microsoft.com/en-us/library/ms179899.aspx). –
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. –