Tôi đã viết một Hàm có giá trị bảng trong Microsoft SQL Server 2008 để lấy một cột được phân tách bằng dấu phẩy trong cơ sở dữ liệu để nhổ ra các hàng riêng biệt cho mỗi giá trị.
Ví dụ: "một, hai, ba, bốn" sẽ trả về một bảng mới chỉ có một cột chứa các giá trị sau:
one
two
three
four
Mã này có dễ bị lỗi không các bạn? Khi tôi kiểm tra nó với
SELECT * FROM utvf_Split('one,two,three,four',',')
nó chỉ chạy mãi mãi và không bao giờ trả lại bất cứ thứ gì Điều này thực sự gây thất vọng đặc biệt là vì không có chức năng phân tách tích hợp trên máy chủ MSSQL (TẠI SAO TẠI SAO?!) Và tất cả các chức năng tương tự tôi tìm thấy trên web là rác hoàn toàn hoặc đơn giản là không liên quan đến những gì tôi đang cố gắng làm .
Đây là chức năng:
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 @FoundIndex = CHARINDEX(@delimiter, @String)
INSERT @SplitValues (Asset_ID) VALUES (@ReturnValue)
END
RETURN
END