0

I am working in SQL Server 2008. I am facing a problem in a where condition, passing multiple company ID values separated by comma (,) to use in Int company ID.

ALTER Procedure
  [dbo].[SP_WorkOrderDetails] @CompanyID varchar(50)
as begin
  Select
    *
  from
    ClientContract C
  left join
    WorkOrder W
  on
    C.Id=W.ClientContractId
  left join
    ClientContractContacts CB
  on
    CB.ClientContractld=C.Id
  left join
    Client CL
  on
    CL.Id= C.Clientld
  left join
    Client CN
  on
    CN.Id= CB.Contactld
  left join
    BaseUnit B
  on
    B.Id=W.BaseUnitId
  left join
    users u
  on
    u.Staffld = W.AssignedTo
  left join
    LatticeERP_DFS..sv_App_Staff SPT
  on
    SPT.Leaderld=W.AssignedTo and
    SPT.Module = 'S'
  left join
    Staff SS
  on
    SS.Id=u.StaffId --and ss.IsTeamLeader = 1
  left join
    Companies Comp
  on
    Comp.id=C.Companyld
  Where
    convert(nvarchar(50),isnull(C.companyID, 1)) in (replace('1,7', '''', ','))
  Order By
    ContractCode,
    WorkOrderNo Desc
end 
Daniel Bürckner
  • 362
  • 1
  • 10
9894
  • 1
  • 3

2 Answers2

0

can you try this

IN  (select cast ( STRING_SPLIT ( '1,7'  , ',' )  as int ) )

or may be this

 IN  ( SELECT 
 Split.a.value('.', 'VARCHAR(100)') AS CVS  
 FROM  
(
SELECT CAST ('<M>' + REPLACE('1,7', ',', '</M><M>') + '</M>' AS XML) AS CVS 
) AS A CROSS APPLY CVS.nodes ('/M') AS Split(a) )
kiran gadhe
  • 733
  • 3
  • 11
0

you can use this table-valued function:

SET QUOTED_IDENTIFIER ON
SET ANSI_NULLS ON
GO
create FUNCTION dbo.SplitString(@str VARCHAR(4000),@seprator VARCHAR(1))
RETURNS TABLE
AS
RETURN ( WITH tokens(p,a,b) AS (SELECT 1,1,CHARINDEX(@seprator,@str)
UNION ALL SELECT p+1,b+1,CHARINDEX(@seprator,@str,b+1)
FROM tokens WHERE b>0
)
SELECT
SUBSTRING(@str,a,CASE WHEN b > 0 THEN b-a ELSE 4000 end)
AS VALUE
FROM tokens)

GO

use it like:

... where ID In(select value from dbo.SplitString('1,7,...',','))
Arsalan
  • 709
  • 2
  • 14
  • 27