Sql server SQL Server-在查询中比较BIGINT和VARCHAR

Sql server SQL Server-在查询中比较BIGINT和VARCHAR,sql-server,tsql,Sql Server,Tsql,我有两个问题;1,我手动运行,返回前5个项目,另一个是执行的存储过程,并将初始查询的结果集作为字符串参数作为其子句的一部分传入 我得到了一个明显的错误,告诉我我不能将BIGINT与VARCHAR进行比较(这很有意义,因为我传递了一个从项目ID的结果集生成的字符串,我希望它在存储过程中返回),但就我的一生而言,我想不出一种解决方法 错误: 将数据类型varchar转换为bigint时出错 查询: DECLARE @Projects AS VARCHAR(MAX) SET @Projects =

我有两个问题;1,我手动运行,返回前5个项目,另一个是执行的存储过程,并将初始查询的结果集作为字符串参数作为其子句的一部分传入

我得到了一个明显的错误,告诉我我不能将BIGINT与VARCHAR进行比较(这很有意义,因为我传递了一个从项目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'
我怎样才能从不同的角度来看待这个问题,因为过去几个小时我一直在用我的头撞击它,而逻辑感觉相当简单


谢谢

因为你发现你不能把那样的字符串传给IN。您要么必须使用动态sql(不推荐),要么找到另一种方法。到目前为止,最好的方法是使用a。啊,谢谢-怀疑有另一种方法!表值参数听起来很方便。您知道我是否可以在SP子句中使用表值参数来执行类似于的操作吗?您只需将预算连接到表值参数。这是一个类似于表的参数。啊-太棒了,谢谢,我要试一试