2016-08-19 2 views
3

Abgesehen von der Umhüllung meines Literals in einer CONVERT-Funktion, gibt es eine Möglichkeit, anzugeben, dass ich z. 12345 als BIGINT und nicht als INT dargestellt? In C# konnte ich 12345L angeben, mir ist jedoch keine entsprechende Funktionalität in T-SQL bekannt.Wie spezifiziert man ein BIGINT-Literal in T-SQL?

+0

Sie können es tun. Anders als der N'value-Wrapper, den du für Unicode verwenden kannst, bin ich mir ziemlich sicher, dass es für numerische Werte keine Wraps wie diese gibt. – dfundako

+0

@dfundako siehe Wraps für andere Typen wie Float und Geld [hier] (https://msdn.microsoft.com/en-us/library/ms179899.aspx). –

+0

Aus Neugier, in welchem ​​Zusammenhang sind Sie besorgt, dass ein String-Literal als Int interpretiert wird anstatt als Bigint? Wenn Sie versuchen, etwas wie 'where [bigIntColumn] = 123' zu tun, wird das String-Literal 123 implizit in eine Bigint konvertiert und dann der Vergleich durchgeführt. –

Antwort

2

Sie müssen explizit zu einem Bigint deklarieren oder umwandeln.

Während es prefixes and symbols for some other datatypes (binary, float, money, etc.) gibt, glaube ich nicht, dass es eine Möglichkeit gibt, dies in T-SQL für bigint zu tun, was nicht explizit das Bigint oder Casting deklariert. Umwandlung in es.

In der Tat wird SQL Server zumindest für eine select...into-Operation einen numerischen (Dezimal) -Datentyp verwenden, sobald Ihre Ganzzahlliterale über das hinausgehen, was in einem int gespeichert werden kann.

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

können Sie verwenden dezimal oder hex wörtlichen wie:

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

Nicht wirklich, das macht eine varbinary: SELECT (0x761CC659 + 0x11E1A300) – Chris

0
select cast(1 as bigint) 

IOW Sie einfach Ihren Wert gegossen. Was wäre der Zweck?

+0

Ich kann an ein Dutzend Anwendungsfälle denken. Aber, hier ist eine einfache: SELECT POWER (256,5) wird fehlschlagen, es sei denn, ich konvertiere explizit (oder CAST für Ihr Beispiel) 256 zu einem bigint wie in SELECT POWER (CONVERT (bigint, 256), 5). – Jason

+0

Ich sehe, T-SQL-Parser ist nicht schlau genug. Eine Möglichkeit wäre: Macht wählen (256.0,5); –

Verwandte Themen