Tsql 转换varchar值时转换失败';1,2,3';到数据类型int

Tsql 转换varchar值时转换失败';1,2,3';到数据类型int,tsql,stored-procedures,sql-server-2012,Tsql,Stored Procedures,Sql Server 2012,我似乎找不到解决这个问题的办法。以下是我的疑问: Declare @MY_STUDENT_ID Varchar(100) Select @MY_STUDENT_ID = COALESCE(@MY_STUDENT_ID + ',', '') + Convert(varchar, STUDENT_ID) From Some_TABLE Where FISCAL_YEAR = '2014' SELECT * FROM Table_Students WHERE STUDENT_ID IN (@MY

我似乎找不到解决这个问题的办法。以下是我的疑问:

Declare @MY_STUDENT_ID  Varchar(100)

Select @MY_STUDENT_ID = COALESCE(@MY_STUDENT_ID + ',', '') + Convert(varchar, STUDENT_ID) From Some_TABLE Where FISCAL_YEAR = '2014'

SELECT * FROM Table_Students WHERE STUDENT_ID IN (@MY_STUDENT_ID)
基本上,第一个查询会运行,并将所有学生ID作为字符串连接起来,例如1,2,3

然后这个值被传递到第二个查询中,但第二个查询给出了这个错误,我已经在标题中发布了这个错误。不知道该怎么做,任何帮助都将不胜感激


STUDENT_ID字段的类型为int。

这里绝对没有必要乱用逗号分隔的列表

直接使用子查询即可

SELECT * 
FROM Table_Students 
WHERE STUDENT_ID IN (SELECT StudentId 
                     From Some_TABLE Where FISCAL_YEAR = '2014')
您的方法不起作用,因为它最终生成了具有

SELECT * 
FROM Table_Students 
WHERE STUDENT_ID IN ('1,2,3') 
这和

SELECT * 
FROM Table_Students 
WHERE STUDENT_ID IN (1,2,3)

因为它只是一个字符串参数,其内容恰好类似于in列表,而不是3个int参数。

这里绝对没有必要乱用逗号分隔的列表

直接使用子查询即可

SELECT * 
FROM Table_Students 
WHERE STUDENT_ID IN (SELECT StudentId 
                     From Some_TABLE Where FISCAL_YEAR = '2014')
您的方法不起作用,因为它最终生成了具有

SELECT * 
FROM Table_Students 
WHERE STUDENT_ID IN ('1,2,3') 
这和

SELECT * 
FROM Table_Students 
WHERE STUDENT_ID IN (1,2,3)

因为它只是一个字符串参数,其内容恰好类似于in列表,而不是3个int参数。

您可以使用动态SQL来实现这一点,但在这种情况下,Martin SMith的答案似乎更好。但是,如果您希望使用动态SQL,则可以这样做(未经测试的伪代码):


您可以使用动态SQL来实现这一点,但在这种情况下,Martin SMith的答案似乎更好。但是,如果您希望使用动态SQL,则可以这样做(未经测试的伪代码):


是的,我知道这是正确的方法,但我想知道我是否也可以像上面发布的那样做。只有通过动态SQL,这应该在这里避免。是的,我知道这是正确的方法,但我想知道我是否也可以像上面发布的那样做。只有通过动态SQL,这应该在这里避免。