不用XML的字符串切分表值函数

前端之家收集整理的这篇文章主要介绍了不用XML的字符串切分表值函数前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
  1. --先增加辅助表
  2. SET NOCOUNT ON
  3. DECLARE @i INT,@iMax INT
  4. SET @iMax=100000
  5. INSERT INTO spt_values (number) VALUES(1)
  6. WHILE 1=1
  7. BEGIN
  8. SELECT @i=MAX(number) FROM spt_values
  9. IF @i<=@imax/2
  10. BEGIN
  11. INSERT INTO spt_values (number)
  12. SELECT @i+number FROM spt_values ORDER BY number
  13. END
  14. ELSE
  15. BEGIN
  16. INSERT INTO spt_values (number)
  17. SELECT TOP( @iMax-@i ) @i+number FROM spt_values ORDER BY number
  18. BREAK;
  19. END
  20. END
  21. GO
  22. --创建表值函数
  23. IF OBJECT_ID('[dbo].[Fun_SplitStr]') IS NOT NULL
  24. DROP FUNCTION [dbo].[Fun_SplitStr]
  25. GO
  26. -- =============================================
  27. -- Author: yenange
  28. -- Create date: 2017-01-11
  29. -- Description: 字符串切分函数(以逗号为切分符)
  30. -- =============================================
  31. CREATE FUNCTION [dbo].[Fun_SplitStr]
  32. (
  33. @str NVARCHAR(MAX)
  34. )
  35. RETURNS TABLE
  36. AS
  37. RETURN
  38. (
  39. SELECT SUBSTRING(@str,b.number,CHARINDEX(',',@str + ',b.number) -b.number) AS item
  40. FROM dbo.spt_values b
  41. WHERE
  42. b.number BETWEEN 1 AND LEN(@str)
  43. AND SUBSTRING(',' + @str,1) = ','
  44. --AND ISNULL(SUBSTRING(@str,b.number) -b.number),'')!=''
  45. )

用 master..spt_values 也行, 但最大才2047, 不够用。

与xml那个切分函数对比, 效率上也没有优势。 不过也算另一种思维, 特此记之。

猜你在找的XML相关文章