Declare @val varchar(50)='247,254'
Select * from fn_SplitString(@val,'')
Select UserInfo.UserId from UserInfo where UserId in (Select * from fn_SplitString(@val,''))
fn_SplitString
ALTER FUNCTION [dbo].[fn_SplitString]
(
@Input NVARCHAR(MAX),
@Character CHAR(1)
)
RETURNS @Output TABLE (
Item NVARCHAR(1000)
)
AS
BEGIN
DECLARE @StartIndex INT, @EndIndex INT
SET @StartIndex = 1
IF SUBSTRING(@Input, LEN(@Input) - 1, LEN(@Input)) <> @Character
BEGIN
SET @Input = @Input + @Character
END
WHILE CHARINDEX(@Character, @Input) > 0
BEGIN
SET @EndIndex = CHARINDEX(@Character, @Input)
INSERT INTO @Output(Item)
SELECT SUBSTRING(@Input, @StartIndex, @EndIndex - 1)
SET @Input = SUBSTRING(@Input, @EndIndex + 1, LEN(@Input))
END
RETURN
END
错误:将varchar值'247,254'转换为时转换失败 数据类型int。
请帮帮我
答案 0 :(得分:1)
如果您使用的是SQL Server 2016,则可以使用string_split,如下所示:
Declare @val varchar(50)='247,254'
Select * from fn_SplitString(@val,'')
Select UserInfo.UserId from UserInfo where UserId in (Select value from string_split(@val, ','))
对于其他版本,您可以创建自定义功能...
答案 1 :(得分:0)
首先,直接在数据上运行您的函数,这样您就可以看到它是如何工作的。这称为测试。
所以,如果你正在运行:
Select * from fn_SplitString(@val, '') ;
然后在结果中查看。你可能会发现你没有提供任何分隔符。
所以试试:
Select * from fn_SplitString(@val, ',') ;
这可能会解决您的问题。
答案 2 :(得分:0)
只需更换&#39;&#39;与&#39;,&#39;你的代码会起作用。 最重要的是,如果您使用SQL Server 2016,则可以使用本机函数String_Split:
SELECT * FROM STRING_SPLIT('247,254',',') AS SS
这样您就不需要任何用户定义的任务功能。