【发布时间】:2019-02-16 11:01:59
【问题描述】:
我有一个名为“TABLE_RELATION”的表。我想使用一些关系代码来过滤选择查询中的值。但是当我尝试使用 IN 运算符时,在转换 varchar 值 ''301','302','303','304','305','306',' 时出现错误 Conversion failed 312'' 到数据类型 smallint。
RELATION_CODE 列是 smallint 类型。
declare @guar_tab varchar(max)
declare @guar_tab_VALUES varchar(max)
select @guar_tab=COALESCE(''+@guar_tab+''',''','''')+convert(varchar(100), RELATION_CODE) from TABLE_RELATION where RELATION_CODE>300 and RELATION_CODE<400
SET @guar_tab_VALUES=(select @guar_tab)+''''+''
SELECT @guar_tab_VALUES
select * from TABLE_RELATION where RELATION_CODE in ( @guar_tab_VALUES)
当我尝试使用 '301','302','303','304','305','306','312' 而不是 @guar_tab_VALUES 时,它工作正常。
我该如何解决这个问题?
我们将不胜感激。
【问题讨论】:
-
我不确定您的实际目标是什么,但您不能使用 标量 值/变量来代替列表。你所拥有的和
WHERE RELATION_CODE IN ('''301'',''302'',''303'',''304'',''305'',''306'',''312''')一样,只是一长串。
标签: sql sql-server