寻求MS SQL函数的解释

时间:2015-06-02 16:25:25

标签: sql sql-server

我在数据库中有以下SQL函数:

ALTER FUNCTION [dbo].[Split_Using] (@StringToSplit varchar(8000),
@Separator varchar(128))
RETURNS TABLE
AS
  RETURN
  WITH Indices
  AS (SELECT
    0 Start,
    1 Ends
  UNION ALL
  SELECT
    Ends,
    CHARINDEX(@Separator, @StringToSplit, Ends) + LEN(@Separator)
  FROM Indices
  WHERE Ends > Start)
  SELECT
    SUBSTRING(@StringToSplit, Start, CASE
      WHEN Ends > LEN(@Separator) THEN Ends - Start - LEN(@Separator)
      ELSE LEN(@StringToSplit) - Start + 1
    END) Id
  FROM Indices
  WHERE Start > 0

即使我已经知道它返回了什么(将字符串分成块,由分隔字符串定义,例如Split_Using('a,b,c',',')会返回一个('a' 'b' 'c')表,我想知道:

  1. 任何人都可以解释它是如何做到的吗?
  2. 我在哪里/如何找到相应的文档(最好是在Microsoft的网站上)
  3. 这是标准SQL吗?

1 个答案:

答案 0 :(得分:4)

这是使用递归公用表表达式(CTE)。在这种情况下WITH Indices部分。 '锚点#39;表达式是UNION ALL之前的第一部分,第二部分是递归地返回Indices

这些的MSDN文档在这里: https://technet.microsoft.com/en-us/library/ms186243%28v=sql.105%29.aspx