2016-05-27 8 views
0

Ich habe eine kleine Abfrage, um Daten aus meiner Tabelle zu bekommen, aber aus irgendeinem Grund manchmal nicht funktionieren.Err 22003 - SQL Server IN Fehler

Table TEST

Abfrage # 1:

Error: 22003 - [SQL Server]The conversion of the nvarchar value '5492215893737' overflowed an int column.

declare @in_array varchar(128) = '51831,43010' 
declare @sql_ varchar (128) = 'SELECT * FROM TEST WHERE ARRAYT IN ('[email protected]_array+')' 
select @in_array as 'output' 
EXEC (@sql_) 

Abfrage # 2: Adaequat

declare @in_array varchar(128) = '5492215893737' 
declare @sql_ varchar (128) = 'SELECT * FROM TEST WHERE ARRAYT IN ('[email protected]_array+')' 
select @in_array as 'output' 
EXEC (@sql_) 

Abfrage # 3:

The conversion of the nvarchar value '5492215893737' overflowed an int column.

declare @in_array varchar(128) = '5492215893737, 13737171' 
declare @sql_ varchar (128) = 'SELECT * FROM TEST WHERE ARRAYT IN ('[email protected]_array+')' 
select @in_array as 'output' 
EXEC (@sql_) 

Abfrage # 4:

Error: [Err] 42S22 - [SQL Server]Invalid column name 'justtest'.
42S22 - [SQL Server]Invalid column name 'thisis'.

declare @in_array varchar(128) = 'thisis, justtest' 
declare @sql_ varchar (128) = 'SELECT * FROM TEST WHERE ARRAYT IN ('[email protected]_array+')' 
select @in_array as 'output' 
EXEC (@sql_) 

Ich kann nicht meine @in_array ändern. Ich meine, dass var sollte immer wie 'var1, var2, var3, var4, Qn' (varchar Typ) sein

#update: Mit dem Code zur Verfügung stellen von Giorgi ich dieses: zweite wählen ist nicht funktioniert, aber warum der dritte arbeitet?

enter image description here

+0

Was ist der Datentyp von ARRAYT? –

+0

Hallo, ist varchar (250) – Jorge

Antwort

0

Diese Werte in einer Eingabezeichenfolge sollte in einfache Anführungszeichen eingeschlossen werden. Ändern Sie die Variable in der Start des Skripts:

set @in_array = '''' + replace(@in_array, ', ', ''',''') + '''' 
+0

Ich habe meine Frage aktualisiert. – Jorge

0

Da es sich um eine Zeichenfolge ist, müssen Sie genügend Zitate in Ihrem SQL haben. Dies sollte funktionieren:

declare @in_array varchar(128) = '''5492215893737'', ''13737171''' 
declare @sql_ varchar (128) = 'SELECT * FROM TEST WHERE ARRAYT IN ('[email protected]_array+')' 
select @in_array as 'output' 
EXEC (@sql_)