Мой код разделенной строки по какой-то причине возвращает только первое значение.Я не могу понять это, поэтому любая помощь будет оценена.Я использую следующее.
declare @CYEnd varchar(4) = '2015, 2016, 2017'
SELECT * FROM vwRMSGrantsSpending
WHERE CYEnd IN (select ltrim(item) from dbo.SplitStringList(@CYEnd, ','))
Это должно быть возвращение 2015, 2016 и 2017. Но это только возвращение 2015.
Вот dbo.SplitStringList
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER FUNCTION [dbo].[SplitStringList](@ListString nvarchar(max), @delim
varchar(2) = ',')
returns @vals table (Item nvarchar(60))
as
begin
declare @CurLoc int, @Item nvarchar(60)
while len(@ListString) > 0
begin
set @CurLoc = charindex(@delim, @ListString, 1)
if @CurLoc = 0
begin
set @Item = @ListString
set @Item = Ltrim(RTrim(@Item))
set @ListString = ''
end
else
begin
set @Item = left(@ListString, @CurLoc - 1)
set @Item = Ltrim(RTrim(@Item))
set @ListString = substring(@ListString, @CurLoc + 1,
Len(@ListString) - @CurLoc)
end
insert into @vals (Item) values (@Item)
end
return
end