Sql server 如何在没有函数的情况下传递多个参数?

Sql server 如何在没有函数的情况下传递多个参数?,sql-server,tsql,stored-functions,Sql Server,Tsql,Stored Functions,我编写的函数是在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 IN

我编写的函数是在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
CREATE FUNCTION[dbo].[UTILfn_Split](@String-NVARCHAR(max),@Delimiter-VARCHAR(10))
返回@ValueTable表([Value]NVARCHAR(max))
开始
声明@NextString NVARCHAR(最大值)
声明@Pos INT
声明@NextPos INT
声明@CommaCheck NVARCHAR(1)
--初始化
设置@NextString=''
设置@CommaCheck=right(@String,1)
--检查尾随逗号,如果不存在,则插入
--if(@CommaCheck@Delimiter)
设置@String=@String+@分隔符
--获取第一个逗号的位置
设置@Pos=charindex(@Delimiter,@String)
设置@NextPos=1
--在级别字符串中仍有逗号时循环
而(@pos 0)
开始
设置@NextString=substring(@String,1,@Pos-1)
插入@ValueTable([Value])
值(@NextString)
设置@String=substring(@String,@pos+1,len(@String))
设置@NextPos=@Pos
设置@pos=charindex(@Delimiter,@String)
结束
返回
结束

目前我使用函数传递多个参数,如下所示,但我需要提高查询性能,避免查询中使用函数。有没有办法在没有功能的情况下传递多个参数?

为什么要重新发明轮子?如果要传递一些元素的数组,那么使用标准的string_split函数,但是如果要传递不同类型的几个不同参数,为什么不传递一个XML字符串呢?。SQL Server具有编码和解码XML字符串的简单功能。@AlwaysLearning
string\u SPLIT()
需要v2016+。。。此外:如果您有v2016+,最好使用。这将是位置安全的,如果需要,甚至是类型安全的。。。对于一个不支持JSON的版本,我更喜欢XML方法(也在这个答案中)