2011-06-24 28 views
2

您好我有一個存儲過程:如何有條件地執行WHERE子句?

ALTER PROCEDURE [dbo].[spGetStaffsAndClients] 
(
    @staffIds nvarchar(1024) 
) 
AS 
BEGIN 

    declare @Address varchar (100) 
    declare @Apartment varchar (100) 
    declare @City varchar (100) 
    declare @State varchar (10) 
    declare @Zip varchar (10) 
    declare @County varchar (100) 
    -- SET NOCOUNT ON added to prevent extra result sets from 
    -- interfering with SELECT statements. 
    SET NOCOUNT ON; 

    -- Insert statements for procedure here 

    /* Get Client's Residence */ 

    select dbo.GetClientFullName(s.FirstName, s.MiddleInit, s.LastName) StaffName, 
    dbo.GetStaffTitlesById(s.Id) StaffTitle, 
    dbo.GetClientFullName(c.FirstName, c.MiddleInit, c.LastName) ClientName, 
    dbo.GetAddressByEntityNameAndId('Client', c.Id) ClientAddress 

    from ClientStaff cs 
    left outer join Staff s on cs.StaffId = s.Id 
    left outer join Client c on cs.ClientId = c.Id 

    where s.Id in (SELECT convert(int,Value) FROM dbo.Split(@staffIds, ',')) 

END 

我想where條款得到執行的只有@staffIds <> ''否則不執行。

請指引我,我怎麼能做到這一點。

回答

2
where 
    @staffIds = '' or 
    @staffIds is null or 
    s.Id in (SELECT convert(int,Value) FROM dbo.Split(@staffIds, ',')) 
+0

很好,它的工作。 – asma

0

您可以先嚐試組合查詢並將其存儲在字符串中。

然後使用EXEC執行字符串。