我想将'1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 ...'(逗号分隔)拆分成一个表或表变量。

有人有连续返回每个函数的函数吗?

最佳答案

这是一些老式的解决方案:

/*
    Splits string into parts delimitered with specified character.
*/
CREATE FUNCTION [dbo].[SDF_SplitString]
(
    @sString nvarchar(2048),
    @cDelimiter nchar(1)
)
RETURNS @tParts TABLE ( part nvarchar(2048) )
AS
BEGIN
    if @sString is null return
    declare @iStart int,
            @iPos int
    if substring( @sString, 1, 1 ) = @cDelimiter
    begin
        set @iStart = 2
        insert into @tParts
        values( null )
    end
    else
        set @iStart = 1
    while 1=1
    begin
        set @iPos = charindex( @cDelimiter, @sString, @iStart )
        if @iPos = 0
            set @iPos = len( @sString )+1
        if @iPos - @iStart > 0
            insert into @tParts
            values  ( substring( @sString, @iStart, @iPos-@iStart ))
        else
            insert into @tParts
            values( null )
        set @iStart = @iPos+1
        if @iStart > len( @sString )
            break
    end
    RETURN

END

在SQL Server 2008中,您可以使用.NET代码实现相同的目的。也许可以更快地运行,但是绝对可以更轻松地管理这种方法。

10-07 21:04