Διαχωρισμός Delimited String στον SQL

Πολλές φορές μπορεί νά έχουμε ένα πεδίο varchar του οποίου τάσ στοιχεία είναι χωρισμένα μέ Delimited και θέλουμε νά τα διαχωρίσουμε.

Αυτό μπορεί νά γίνει βέβαια από τον client μέσω VB.NET η C#.Αλλά πώς μπορούμε νά το κάνουμε μέσα από τον SQL όταν το συγκεκριμμένο πεδίο θέλουμε νά το χρησιμοποιήσουμε μέσα σε μιά Stored Procedure στον MS SQL.

Παρακάτω σας παραθέτω μία function με την οποία μπορούμε να το πετύχουμε.

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FnBreakDelimited]') and xtype in (N'FN', N'IF', N'TF'))
drop function [dbo].[FnBreakDelimited]
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS OFF
GO
create function dbo.FnBreakDelimited(@StringToBreak varchar(255),@Delimiter varchar(1))
returns int
as
BEGIN
declare @pos int
select @pos=charindex(@Delimiter,@StringToBreak)
return @pos
END
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

Χρησιμοποίηση της παραπάνω function

Ας υποθέσουμε πώς έχουμε μιά varchar μεταβλητή

Declare @vStr varchar(80)

Επίσης μία varchar μεταβλητή πού δημιουργεί άνα δυναμικό string που θα χρησιμοποιηθεί μέσα σέ ένα δυναμικό SQL



Declare @DynSQL varchar(255),@pos int
select @vStr='1,2,3,4,5,6',@DynSQL=' IN ('
while @vStr<>''
begin
set @pos=master.dbo.FnBreakDelimited(@vStr,',')
if @pos>0
 begin
  set @DynSQL=@DynSQL+substring(@vStr,1,@pos-1)+','
  set @vStr=substring(@vStr,@pos+1,len(@vStr))
 end
else
if @pos=0
 begin
  set @DynSQL=@DynSQL+@vStr
  set @vStr=''
 end
end

set @DynSQL=substring(@DynSQL,1,len(@DynSQL)-1)+')'

--Επιστροφή varchar για δημιουργία SQL 
select @DynSQL

--Αποτέλεσμα

IN (1,2,3,4,5,6)

Στην εκτέλεση της Function όπως βλέπετε χησιμοποίησα την master Database αυτό το έκανα γιατί εκεί την δημιούργησα για να μπορώ νά έχω πρόσβαση σ'αυτή απο οποιαδήποτε άλλη βάση και να μήν χρειάζεται νά την δημιουργώ σέ κάθε βάση που θά την χρειαστώ

Αυτά προς το παρόν

Share


Έχουν δημοσιευτεί Σάββατο, 11 Φεβρουαρίου 2006 10:47 πμ από το μέλος imanos
Καταχώρηση στις κατηγορίες:

Σχόλια:

Χωρίς Σχόλια