我有2个查询;首先,我手动运行,返回前5个项目,另一个是存储过程,该过程执行后将初始查询的结果集作为字符串参数作为子句的一部分传入。
我收到一个明显的错误,告诉我我无法将BIGINT与VARCHAR进行比较(这很有意义,因为Im传递了从我的Project ID结果集构建的字符串,我希望它在存储过程中返回) ,但对于我的一生,想不出办法。
错误:
将数据类型varchar转换为bigint时出错
查询:
DECLARE @Projects AS VARCHAR(MAX)
SET @Projects = (SELECT '''' + SUBSTRING((SELECT TOP 5 ''',' + '''' + CAST(Project_ID AS VARCHAR) AS 'data()'
FROM Project
WHERE ISNULL(Imported, 0) = 0
FOR XML PATH('')), 4 , 9999) + '''')
SELECT @Projects
EXEC TestSP @values = @Projects
存储过程:
ALTER PROCEDURE [dbo].[TestSP]
@values AS VARCHAR(MAX)
AS
BEGIN
SET NOCOUNT ON;
SELECT Project
FROM Budget
WHERE Budget.Project IN (@values)
END
我从查询中获得的结果集是:
'5863 ','5875 ','5892 ','5899 ','5955'
在过去的两个小时里,我一直对着它ash之以鼻,并且逻辑感觉很简单,我该如何从另一个角度来解决这个问题。
谢谢