我在 Microsoft SQL Server 2008 中编写了一个表值函数,以在数据库中使用逗号分隔的列来为每个值吐出单独的行。
例如:“一、二、三、四”将返回一个只有一列包含以下值的新表:
one
two
three
four
Run Code Online (Sandbox Code Playgroud)
这段代码看起来容易出错吗?当我测试它时
SELECT * FROM utvf_Split('one,two,three,four',',')
Run Code Online (Sandbox Code Playgroud)
它永远运行并且永远不会返回任何东西。这真的很令人沮丧,尤其是因为 MSSQL 服务器上没有内置的拆分函数(为什么为什么为什么?!)而且我在网上找到的所有类似函数都是绝对垃圾或根本与我想要做的事情无关.
这是函数:
USE *myDBname*
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER FUNCTION [dbo].[utvf_SPlit] (@String VARCHAR(MAX), @delimiter CHAR)
RETURNS @SplitValues TABLE
(
Asset_ID VARCHAR(MAX) NOT NULL
)
AS
BEGIN
DECLARE @FoundIndex INT
DECLARE @ReturnValue VARCHAR(MAX)
SET @FoundIndex = CHARINDEX(@delimiter, @String)
WHILE (@FoundIndex <> 0)
BEGIN
DECLARE @NextFoundIndex INT
SET @NextFoundIndex = CHARINDEX(@delimiter, @String, @FoundIndex+1)
SET @ReturnValue = SUBSTRING(@String, @FoundIndex,@NextFoundIndex-@FoundIndex)
SET …Run Code Online (Sandbox Code Playgroud)