存储过程:
ALTER PROCEDURE [dbo].[MyProcedure]
@CommaSeperatedValues nvarchar(500)
AS
BEGIN
SET NOCOUNT ON;
SELECT Col1, Col2, Col3
FROM MyTable
WHERE SomeCol_BigIntDataType IN (@CommaSeperatedValues)
来自Code的值是字符串值:“ 9010073,9010074”
我试过像这样运行SP:exec MyProcedure'9010073,9010074'
运行SP时出现错误“将数据类型nvarchar转换为bigint时出错”
如果我单独运行选择查询,如下所示:
SELECT Col1, Col2, Col3
FROM MyTable
WHERE SomeCol_BigIntDataType IN (9010073,9010074)
然后,我得到了预期的结果。
但是我想从SP运行。
在数据库中创建以下表格函数作为SplitString。当您想要选择项目时;用这个:
Select Part from SplitString(@YourValues, ',')
在查询中使用上述select语句。
SELECT Col1, Col2, Col3
FROM MyTable
WHERE SomeCol_BigIntDataType IN (Select Part from SplitString(@CommaSeperatedValues, ','))
下面的函数在您的数据库中执行一次。
CREATE FUNCTION [dbo].[SplitString]
(
-- Add the parameters for the function here
@myString varchar(500),
@deliminator varchar(10)
)
RETURNS
@ReturnTable TABLE
(
-- Add the column definitions for the TABLE variable here
[id] [int] IDENTITY(1,1) NOT NULL,
[part] [varchar](50) NULL
)
AS
BEGIN
Declare @iSpaces int
Declare @part varchar(50)
--initialize spaces
Select @iSpaces = charindex(@deliminator,@myString,0)
While @iSpaces > 0
Begin
Select @part =
substring(@myString,0,charindex(@deliminator,@myString,0))
Insert Into @ReturnTable(part)
Select @part
Select @myString =
substring(@mystring,charindex(@deliminator,@myString,0)+
len(@deliminator),len(@myString) - charindex(' ',@myString,0))
Select @iSpaces = charindex(@deliminator,@myString,0)
end
If len(@myString) > 0
Insert Into @ReturnTable
Select @myString
RETURN
END
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句