当我在sql server存储过程中传递多个id时,它将引发如下错误==>将varchar值'1,2'转换为数据类型int时转换失败。 这是SQL查询 ===>选择*从某处colName输入(@Ids)
答案 0 :(得分:0)
如果您的存储过程参数期望varchar(n)
,请查看T-SQL split string接受的答案,以将varchar
中的值分割掉。
然后,您可以在存储过程中应用该函数,只需将查询更改为以下内容即可:
alter procedure your_stored_procedure
@ids varchar(50)
as
begin
select *
from some_table
where colName in (splitstring(@ids))
end
go
但是,如果您的存储过程接受int
作为参数,请将其更改为varchar
或任何数据类型。您的存储过程将无法工作,因为int仅接受单个整数值。
答案 1 :(得分:0)
您必须先将字符串分成几行。
为此,您可以使用我的sql Splitext函数
此处正在安装脚本
DROP FUNCTION IF EXISTS [dbo].[SplitText]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[SplitText]') AND type in (N'FN', N'IF', N'TF', N'FS', N'FT'))
BEGIN
execute dbo.sp_executesql @statement = N'CREATE FUNCTION [dbo].[SplitText]
( @TextForSplit varchar(1000)
, @SplitWith varchar(5) = '',''
)
RETURNS @DataSource TABLE
(
ID TINYINT identity,
[Value] VARCHAR(500) NOT NULL
)
AS
BEGIN
DECLARE @XML xml = N''<r><![CDATA['' + REPLACE(@TextForSplit, @SplitWith, '']]></r><r><![CDATA['') + '']]></r>''
INSERT INTO @DataSource ([Value])
SELECT RTRIM(LTRIM(T.c.value(''.'', ''NVARCHAR(128)'')))
FROM @xml.nodes(''//r'') T(c)
DELETE @DataSource WHERE [VALUE] = ''''
RETURN
END
END
GO
这是使用方法。
SELECT * FROM SomeTAble WHERE colName in( select value from Splittext('1,2,3,4,5' , ','))