存储过程:
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/