【问题标题】:Err 22003 - SQL Server IN Error错误 22003 - SQL Server 输入错误
【发布时间】:2016-05-27 23:30:12
【问题描述】:

我有一个小查询要从我的表中获取数据,但由于某种原因有时不起作用。

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:

错误:[Err] 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 type)

#更新: 通过 Giorgi 提供的代码,我得到:第二个选择不起作用,但为什么第三个起作用?

enter image description here

【问题讨论】:

  • ARRAYT的数据类型是什么?
  • 你好,是 varchar(250)

标签: sql-server


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    因为它是一个字符串,所以你的 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_)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-27
      • 2016-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多