在存储过程中由IN运算符导致的数据类型nvarchar转换为bigint时出错

Miu*_*Miu 2 sql-server stored-procedures nvarchar in-operator

存储过程:

ALTER PROCEDURE [dbo].[MyProcedure]
    @CommaSeperatedValues nvarchar(500)
AS
BEGIN
    SET NOCOUNT ON;
    SELECT  Col1, Col2, Col3
    FROM MyTable
    WHERE SomeCol_BigIntDataType IN (@CommaSeperatedValues) 
Run Code Online (Sandbox Code Playgroud)

来自Code的值是字符串值:"9010073,9010074"

我尝试像这样运行SP:exec MyProcedure'9010073,9010074'

这是在运行SP时出现错误'错误将数据类型nvarchar转换为bigint'

如果我单独运行select查询,如下所示:

SELECT  Col1, Col2, Col3
    FROM MyTable
    WHERE SomeCol_BigIntDataType IN (9010073,9010074)
Run Code Online (Sandbox Code Playgroud)

然后我得到了预期的结果.

但我想从SP运行.

小智 5

开始了.您可以通过动态查询执行此操作

DECLARE @mystring NVARCHAR(max)
DECLARE @UserId  NVARCHAR(max)
SET @UserId = '9010073,9010074'
SELECT @mystring = 'SELECT  Col1, Col2, Col3 FROM MyTable where UserId IN('+ @UserId +')'
EXEC sp_executesql @mystring
Run Code Online (Sandbox Code Playgroud)