sql-server - 存储过程中 IN 运算符导致数据类型 nvarchar 转换为 bigint 时出错

标签 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) 

来自代码的值是字符串值:“9010073,9010074”

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

运行 SP 时出现错误“将数据类型 nvarchar 转换为 bigint 时出错”

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

SELECT  Col1, Col2, Col3
    FROM MyTable
    WHERE SomeCol_BigIntDataType IN (9010073,9010074)

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

但我想从 SP 运行。

最佳答案

我们开始吧。你可以通过动态查询来做到这一点

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

关于sql-server - 存储过程中 IN 运算符导致数据类型 nvarchar 转换为 bigint 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28578600/

相关文章:

sql-server - GUID 是否应该用作许多表的外键

sql-server - col1 的计数超过 col2 的 order

sql - 执行storedproc时可以将表作为参数传递吗?

Javascript:将长 CSV 字符串拆分为字符串数组而不丢失值

sql-server-2012 - 在 nvarchar(max) 列上创建索引

sql - 案例当...然后

sql-server - 无法获取有关 SQL Server 的信息

postgresql:嵌套插入

c# - SQL Server 存储过程和 C#

sql-server - 什么时候分配空间