Selamlar ;
Bazı zamanlar belli bir string'i belli bir pattern ile parse ederek daha sonrada parse edilen veriyi bir table olarak daha dış katmanda yer alan where clause içerisinde "in" ile işlemlere dahil etmek isteriz.Bunu yapmak özellikle publish gerektiren desktop projelerinde clientlar ile uğraşmadan hızlıca çözüm geliştirmemizi sağlamamızı sağlar.(temp ya da önceden belirlenmiş böyle bir alan..)Aşağıda bu işi yaparken kullandığım function'ı ve kullanımını paylaşıyorum.İşinize yarayacaktır.
USE [LE_12]
GO
/****** Object: UserDefinedFunction [dbo].[fnCommaParser] Script Date: 06/25/2010 11:43:10 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER FUNCTION [dbo].[fnCommaParser] (@search VARCHAR(8000))
RETURNS @retisoc_tab table (isocs varchar(8000)) AS
BEGIN
declare @pos int,@isoc varchar(8000),@strlen int
declare @isoc_tab table (isocs varchar(8000))
set @search = ltrim(rtrim(@search))
while len(@search) >=0
begin
set @strlen = len(ltrim(@search))
set @pos = charindex(',',@search,1)
if @pos=0 and @search is not null
begin
set @search = ltrim(rtrim(@search))
insert into @isoc_tab values(@search)
insert into @retisoc_tab select * from @isoc_tab
return
end
set @isoc = substring(rtrim(ltrim(@search)),1,@pos-1)
insert into @isoc_tab values(@isoc)
set @search = ltrim(right(@search,@strlen-@pos))
end
return
END
kullanımı içinde..
declare @glbMotherPo=N'43333,432222,435rrr,432555,2222';
select count(*) as adet from bes_tb
inner join bes_tb_detail on (bes.fbc_batch=bes_tb_detail.BST_BATCH)
where fbc_batch in (
SELECT FBF_BATCH
FROM (SELECT FBF_VALUE, FBF_FEATURE, FBF_BATCH FROM bes_feature) up
PIVOT (max(FBF_VALUE) FOR FBF_FEATURE IN (MotherPO, NextOperation)) AS pvt
where
MotherPO in (SELECT * FROM fnCommaParser(@glbMotherPo)) and
NextOperation='BOSC'))
Sevgiler.
E2