Our input looks like '45,65,748,ABC001,XYZ05'
And we need output like following
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[fnc_GetValuesInColumnFromCSV]') AND type in (N'FN', N'IF', N'TF', N'FS', N'FT'))
BEGIN
execute dbo.sp_executesql @statement = N'-- =============================================
-- Author: AASIM ABDULLAH
-- Description: TO GET VALUE IN TABLE FORMAT FROM CSV INPUT
-- =============================================
CREATE FUNCTION [dbo].[fnc_GetValuesInColumnFromCSV]
(
@csv NVARCHAR(4000)
)
RETURNS @result_table TABLE
(
value NVARCHAR(250) NULL
)
AS
BEGIN
-- Declare the return variable here
DECLARE @MyTempTable TABLE ( ID INT )
-- Add the T-SQL statements to compute the return value here
IF Len(@csv) > 0
BEGIN
DECLARE @i INT
SELECT @i = 1
WHILE ( @i <= LEN(@csv) + 2 )
BEGIN
INSERT INTO @MyTempTable
SELECT @i
SET @i = @i + 1
END
DECLARE @IDs nvarchar(4000)
SET @IDs = @csv
----
INSERT INTO @result_table ( value )
SELECT NullIf(SubString('','' + @IDs + '','', ID,
CharIndex('','', '','' + @IDs + '','',
ID) - ID), '''') AS value
FROM @MyTempTable AS P
WHERE ID <= Len('','' + @IDs + '','')
AND SubString('','' + @IDs + '','', ID - 1, 1) = '',''
AND CharIndex('','', '','' + @IDs + '','', ID) - ID > 0
END
-- Return the result
RETURN
END '
END
GO
1. SELECT *
FROM dbo.fnc_GetValuesInColumnFromCSV('45,65,748,ABC001,XYZ05')
2. Use AdventureWorks
SELECT *
fROM Purchasing.Vendor
WHERE AccountNumber IN (
SELECT [value]
FROM dbo.fnc_GetValuesInColumnFromCSV('PREMIER0001,COMFORT0001,
METROSP0001,GREENLA0001,MOUNTAIN0001') )
3. SELECT *
FROM Purchasing.Vendor
INNER JOIN dbo.fnc_GetValuesInColumnFromCSV('PREMIER0001,COMFORT0001,METROSP0001,GREENLA0001,MOUNTAIN0001')
AS CSV ON Purchasing.Vendor.AccountNumber = CSV.value
No comments:
Post a Comment
All suggestions are welcome