MessagePaul,
There is already an open source function in SQL Server to do this for you:

http://www.4guysfromrolla.com/webtech/031004-1.shtml

They explain how to put it together.  

Here is the function creation for how I put it together from their explanation:

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[Split]') 
and xtype in (N'FN', N'IF', N'TF'))
drop function [dbo].[Split]
GO

SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS OFF 
GO


CREATE  FUNCTION dbo.Split
(
 @List nvarchar(4000),
 @SplitOn nvarchar(5)
)  

RETURNS @RtnValue table 
(
  
 Id int identity(1,1),
 Value nvarchar(250)
) 

AS  

BEGIN

 While (Charindex(@SplitOn,@List)>0)
 Begin
 
  Insert Into 
   @RtnValue
    (
    value
   )
  Select
       Value = ltrim(rtrim(Substring(@List,1,Charindex(@SplitOn,@List)-1)))
 
      Set @List = 
Substring(@List,Charindex(@SplitOn,@List)+len(@SplitOn),len(@List))
 End
 
 Insert Into 
  @RtnValue 
  (
   Value
  )
 Select 
  Value = ltrim(rtrim(@List))
 
 Return

END

GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

It is implemented as such:

CREATE PROCEDURE getEmployeesByID(@employeeList nvarchar(1000))
AS

Select 
   employeeId, -- integer (int)
   FirstName, 
   LastName 
from #myTable
Where 
   employeeId IN (Select convert(int,Value) from dbo.Split(@employeeList,','))


Cheers,
Teddy


  ----- Original Message ----- 
  From: Paul Morton 
  To: [email protected] 
  Sent: Tuesday, June 05, 2007 1:36 PM
  Subject: [ACFUG Discuss] OT: SQL help


  I apologize for the OT post, but I'm getting frustrated.

  I am attempting to use a UDF to split a varchar (comma delimited list of 
ints) in an IN clause in a SQL statement, and I'm not able to get the SQL 
statement to pass a Table field to the UDF.

  I'm hoping someone sees a glaring error, or can tell me I can't do this.
  MS SQL 2000
  ________________________________________________________________
  CREATE FUNCTION dbo.Split
   (
    @List nvarchar(2000),
    @SplitOn nvarchar(5)
   )  
   RETURNS @RtnValue table 
   (
    
    Id int identity(1,1),
    Value nvarchar(100)
   ) 
   AS  
   BEGIN 
    While (Charindex(@SplitOn,@List)>0)
    Begin

     Insert Into @RtnValue (value)
     Select 
      Value = ltrim(rtrim(Substring(@List,1,Charindex(@SplitOn,@List)-1)))

     Set @List = 
Substring(@List,Charindex(@SplitOn,@List)+len(@SplitOn),len(@List))
    End

    Insert Into @RtnValue (Value)
    Select Value = ltrim(rtrim(@List))
   
    Return
   END
  
________________________________________________________________________________

  SQL Statement
  SELECT     *
  FROM         dbo.ORDER_ITEMS oi LEFT OUTER JOIN
                        dbo.AP_translation tr ON tr.option_id IN
  (select convert(int,Value) from dbo.Split(oi.OptionIDs, ','))
  WHERE     (oi.Order_ID = 12387)
  _____________________________________________________________________________
  Error received:
  Server: Msg 170, Level 15, State 1, Line 4
  Line 4: Incorrect syntax near '.'.


  OptionIDs is a varchar(255) field with a comma delimited list of integers.
  It doesn't like the oi.OptionIDs.  If I put in a list like '0,1,2' in it's 
place, the query works.

  Can I not pass a field into a UDF?
  Is there another way to skin this cat?


  Paul

  ------------------------------------------------------------- 
  Annual Sponsor - Figleaf Software 

  To unsubscribe from this list, manage your profile @ 
  http://www.acfug.org?fa=login.edituserform 

  For more info, see http://www.acfug.org/mailinglists 
  Archive @ http://www.mail-archive.com/discussion%40acfug.org/ 
  List hosted by FusionLink 
  -------------------------------------------------------------


-------------------------------------------------------------

Annual Sponsor FigLeaf Software - http://www.figleaf.com



To unsubscribe from this list, manage your profile @ 

http://www.acfug.org?fa=login.edituserform



For more info, see http://www.acfug.org/mailinglists

Archive @ http://www.mail-archive.com/discussion%40acfug.org/

List hosted by http://www.fusionlink.com

-------------------------------------------------------------


Reply via email to