timcunningham

UDF to use a comma seperated list in a MSSQL Stored proc

Apr 12th, 2011
143
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
T-SQL 4.60 KB | None | 0 0
  1. FUNCTION fnSYS_Split_Comma_Separated_List_Of_Strings_To_String_Table
  2. (
  3.     @strData varchar(8000)
  4.     
  5. )
  6.  
  7. RETURNS @output TABLE (strData varchar(8000))
  8.  
  9. AS
  10.  
  11. BEGIN
  12.  
  13.     declare @intPosition int
  14.     declare @intStart int
  15.     declare @intEnd int
  16.     declare @strPart varchar(8000)
  17.     
  18.     set @strData = replace(@strData,' ,',',')
  19.     set @strData = replace(@strData,', ',',')
  20.  
  21.     if (charindex(',', @strData) = 0) --if only one value append a , so that it still gets parsed
  22.  
  23.     set @strData = @strData + ','
  24.     set @intPosition = charindex(',', @strData)
  25.  
  26.     insert into @output values (ltrim(rtrim(substring(@strData, 0, @intPosition))))
  27.  
  28.     if charindex(',',@strData) > 0
  29.         begin
  30.  
  31.  
  32.             while ((charindex(',', @strData, @intPosition)) <> 0)
  33.                 begin
  34.  
  35.                     set @intStart = charindex(',', @strData, @intPosition)
  36.                     set @intEnd = charindex(',', @strData, @intStart+1)
  37.                     if (@intEnd = 0)
  38.                         set @intEnd = len(@strData) - @intStart
  39.  
  40.                     set @strPart = ltrim(rtrim(substring(@strData, @intStart+1, abs(@intEnd - @intStart-1))))
  41.                     insert into @output    values (@strPart)
  42.  
  43.                     set @intPosition = charindex(',', @strData, @intPosition) + 1
  44.  
  45.                 end
  46.         end
  47.         
  48.     return
  49.  
  50. END
  51.  
  52. --Here is the int version
  53. FUNCTION dbo.fnSYS_Split_Comma_Separated_List_Of_Integers_To_Integer_Table
  54. (
  55.     @strData varchar(8000)
  56.     
  57. )
  58.  
  59. RETURNS @output TABLE (intData int)
  60.  
  61. AS
  62.  
  63. BEGIN
  64.  
  65.     declare @intPosition int
  66.     declare @intStart int
  67.     declare @intEnd int
  68.     declare @strPart varchar(8000)
  69.  
  70.     if charindex(',', @strData) = 0
  71.         begin
  72.             insert @output values (convert(int,ltrim(rtrim(@strData))))
  73.         end
  74.     else
  75.         begin
  76.  
  77.             set @strData = replace(@strData,' ,',',')
  78.             set @strData = replace(@strData,', ',',')
  79.  
  80.             set @intPosition = charindex(',', @strData)
  81.  
  82.             insert @output values (convert(int,ltrim(rtrim(substring(@strData, 0, @intPosition)))))
  83.  
  84.             if charindex(',',@strData) > 0
  85.                 begin
  86.  
  87.                     while ((charindex(',', @strData, @intPosition)) <> 0)
  88.                         begin
  89.  
  90.                             set @intStart = charindex(',', @strData, @intPosition)
  91.                             set @intEnd = charindex(',', @strData, @intStart+1)
  92.                             if (@intEnd = 0)
  93.                                 set @intEnd = 500
  94.  
  95.                             set @strPart = ltrim(rtrim(substring(@strData, @intStart+1, abs(@intEnd - @intStart-1))))
  96.                             insert into @output    values (convert(int,@strPart))
  97.  
  98.                             set @intPosition = charindex(',', @strData, @intPosition) + 1
  99.  
  100.                         end
  101.                 end
  102.         end
  103.  
  104.  
  105.  
  106.     return
  107.  
  108. END
  109.  
  110.  
  111. Example of how to use:
  112.  
  113. DECLARE @strMy_User_ID_List varchar(100)
  114. SET @strMy_User_ID_List = "10,15,92,51"
  115.  
  116. select *
  117.  
  118. from tblUsers
  119.  
  120. where numUser_ID in
  121.  
  122. (
  123.  
  124. select *
  125.  
  126. from dbo.dbo.fnSYS_Split_Comma_Separated_List_Of_Integers_To_Integer_Table(@strMy_User_ID_List)
  127.  
  128. )
Advertisement
Add Comment
Please, Sign In to add comment