Как передать несколько параметров без функции? - PullRequest
2 голосов
/ 10 октября 2019

Я написал функцию для передачи нескольких параметров в запрос where, но теперь я столкнулся с проблемой производительности.

Мне нужно, чтобы функция не передавала несколько параметров.

CREATE FUNCTION [dbo].[UTILfn_Split] (@String NVARCHAR(max), @Delimiter VARCHAR(10))
RETURNS @ValueTable TABLE ([Value] NVARCHAR(max))

BEGIN
    DECLARE @NextString NVARCHAR(max)
    DECLARE @Pos INT
    DECLARE @NextPos INT
    DECLARE @CommaCheck NVARCHAR(1)

    --Initialize  
    SET @NextString = ''
    SET @CommaCheck = right(@String, 1)
    --Check for trailing Comma, if not exists, INSERT  
    --if (@CommaCheck <> @Delimiter )  
    SET @String = @String + @Delimiter
    --Get position of first Comma  
    SET @Pos = charindex(@Delimiter, @String)
    SET @NextPos = 1

    --Loop while there is still a comma in the String of levels  
    WHILE (@pos <> 0)
    BEGIN
        SET @NextString = substring(@String, 1, @Pos - 1)

        INSERT INTO @ValueTable ([Value])
        VALUES (@NextString)

        SET @String = substring(@String, @pos + 1, len(@String))
        SET @NextPos = @Pos
        SET @pos = charindex(@Delimiter, @String)
    END

    RETURN
END

В настоящее время я использую функцию для передачи нескольких параметров, как показано ниже, но мне нужно улучшить производительность запросов, избегая функции взапрос. Есть ли способ передать несколько параметров без функции?

...