9 Kasım 2015 Pazartesi

Sql Server String Data Split Parse

Merhaba, bu yazımda birden fazla veriyi tek parametre üzerinde göndermek istediğimizde Sql Server tarafında bu verilerin nasıl parse edileceğini anlatacağım.

Bazı özel durumlarda application performansından fazla harcamamak adına birden fazla veriyi tek bir parametre olarak göndermek isteyebiliriz. Örneğin bir checkboxlist checked verisini.

Aşağıdaki fonksiyon gönderdiğiniz veriyi parse edip table formatında geri döndürdükten sonra içinde dönebilirsiniz.

Örnek Verimiz: "2_5_67_55_66" olsun

Fonksiyonumuz aşağıdaki gibi olacak;

CREATE FUNCTION FN_SPLIT_STRING

    @STRING NVARCHAR(MAX), 
    @DELIMITER CHAR(1) 

RETURNS @OUTPUT TABLE(SPLITDATA NVARCHAR(MAX) 

BEGIN 
    DECLARE @START INT, @end INT 
    SELECT @START = 1, @END = CHARINDEX(@DELIMITER, @STRING) 
    WHILE @START < LEN(@STRING) + 1 BEGIN 
        IF @END = 0  
            SET @END = LEN(@STRING) + 1 
        INSERT INTO @OUTPUT (SPLITDATA)VALUES(SUBSTRING(@STRING, @START, @END - @START)) 
        SET @START = @END + 1 
        SET @END = CHARINDEX(@DELIMITER, @STRING, @START) 
    END 
    RETURN 
END

Şimdi örnek veri üzerinden giderek aşağıdaki gibi bir sorgu çalıştıralım.

SELECT *from FN_SPLIT_STRING('2_5_67_55_66','_')

Output format aşağıdaki gibi olacaktır.

SPLITDATA
2
5
67
55
66