错误22003 - SQL Server IN错误

时间:2016-05-27 01:43:14

标签: sql-server

我有一个小查询从我的表格中获取数据,但由于某些原因,有时无法工作。

Table TEST

查询#1:

  

错误:22003 - [SQL Server] nvarchar值的转换' 5492215893737'溢出了一个int列。

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

查询#2:正常工作

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

查询#3:

  

nvarchar值的转换' 5492215893737'溢出了一个int列。

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

查询#4:

  

错误:[错误] 42S22 - [SQL Server]列名称无效' justtest'。
  42S22 - [SQL Server]列名称无效' thisis'。

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

我无法更改@in_array。我的意思是var应该总是像var1,var2,var3,var4,varN' (varchar类型)

#UPDATE: 使用Giorgi提供的代码,我得到了:第二个选择不起作用,但为什么第三个选择有效?

enter image description here

2 个答案:

答案 0 :(得分:0)

输入字符串中的那些值应该用单引号括起来。更改脚本开头的变量:

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

答案 1 :(得分:0)

因为它是一个字符串,所以你需要在SQL中有足够的引号。这应该有效:

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