我有变量
DECLARE @Routs NVARCHAR(1024)
@i int
SET @Routs = N'6,4,-5,8'
我需要从这个sting中提取任何数字,它前面有减号(示例中为-5) 并使用它作为输入参数,在不同的存储过程中输出out( - ),例如@i。
答案 0 :(得分:1)
将你的@Routs参数传递给一个表值函数,该函数将列表拆分成一个表,然后循环遍历表,如果值为负数,则执行存储过程或任何你想要的或不做任何事情不是消极的。
- 用逗号分割参数的表函数
ALTER FUNCTION [dbo].[SplitListOfInts] (@list nvarchar(MAX))
RETURNS @tbl TABLE (number int NOT NULL) AS
BEGIN
DECLARE @pos int,
@nextpos int,
@valuelen int
if len(rtrim(@list)) > 0
begin
SELECT @pos = 0, @nextpos = 1
WHILE @nextpos > 0
BEGIN
SELECT @nextpos = charindex(',', @list, @pos + 1)
SELECT @valuelen = CASE WHEN @nextpos > 0
THEN @nextpos
ELSE len(@list) + 1
END - @pos - 1
INSERT @tbl (number)
VALUES (convert(int, substring(@list, @pos + 1, @valuelen)))
SELECT @pos = @nextpos
END
end
RETURN
END
- 调用split函数并使用@routs参数的存储过程
CREATE TABLE #values(nbrValue int)
INSERT INTO #values(nbrValue
EXEC [dbo].[SplitListOfInts] @routs
- 如果您不关心非负面消息,请在此处删除
DELETE FROM #values
where nbrValue >= 0
DECLARE @i int
DECLARE @countrows = (SELECT COUNT(nbrValue) FROM #values)
WHILE @countrows >0
SET @i = (SELECT TOP 1 nbrValue FROM #values)
......做你想做的事
DELETE FROM #values where nbrValue=@i
set @countrows = (SELECT COUNT(nbrValue) FROM #values)
END