我有一个小查询从我的表格中获取数据,但由于某些原因,有时无法工作。
查询#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提供的代码,我得到了:第二个选择不起作用,但为什么第三个选择有效?
答案 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_)