2010-06-13 58 views
-1

我有这个程序我需要在SQL Server数据库中使用字符串变量在proc 2005

CREATE Proc [dbo].Salse_Ditail 
    -- Add the parameters for the stored procedure here 
    @Report_Form varchar(1) , 
    @DateFrom datetime , 
    @DateTo datetime , 
    @COMPANYID varchar(3), 
    @All varchar(1) , 
    @All1 varchar(1) , 
    @All2 varchar(1) , 
    @All3 varchar(1) , 
    @All4 varchar(1) , 
    @All5 varchar(1) , 
    @Sector varchar(10), 
    @Report_Parameter nvarchar(max) 
as 
BEGIN 
    -- SET NOCOUNT ON added to prevent extra result sets from 
    -- interfering with SELECT statements. 
    DECLARE @STRWhere nvarchar(max) 

    IF @All5=0 AND @All4=0 AND @All3=0 AND @All2=0 AND @All1=0 and @All=1 
     set @STRWhere= N'and Sector_id = @Sector' 

    if @Report_Form =1 or @Report_Form =3 or @Report_Form =4 

    SELECT RETURNREASONCODEID, SITE,SITE_NAME,Factory_id,Factory_Name,Sector_id,sector_name,Customer_name, 
     Customer_id,ITEMID,ITEMNAME,SALESMANID,SALESMAN_NAME,Net_Qty,Net_Salse,Gross_Sales,Gross_Qty, 
     NETWEIGHT_Gross,NETWEIGHT_salse_Gross,NETWEIGHT_NET,NETWEIGHT_salse_NET,Return_Sales,Free_Good, 
     CollectionAmount 

    FROM hal_bas_new_rep 

    WHERE DATAAREAID [email protected] AND INVOICEDATE >= @DateFrom 
     AND INVOICEDATE <= @DateTo and Report_Activti = @Report_Form 

    if @Report_Form =2 

     SELECT RETURNREASONCODEID , RETURNREASONDESC, SITE , SITE_NAME , Factory_id , 
      Factory_Name , Sector_id , sector_name , Customer_name , Customer_id , 
      ITEMID , ITEMNAME , SALESMANID , SALESMAN_NAME , Return_Sales  

     FROM dbo.hal_bas_new_rep 

     WHERE DATAAREAID [email protected] AND INVOICEDATE >= @DateFrom 
      AND INVOICEDATE <= @DateTo and Report_Activti = @Report_Form 
      and RETURNREASONCODEID in 
      ( 
       SELECT  Val 
       FROM dbo.fn_String_To_Table(@Report_Parameter,',',1) 
      ) 
      /* 
      @STRWhere // question: how can I use the variable here? 
      */ 
end 
GO 

正如你看到的我是构建一个条件在变量WHERE子句,但我不知道如何使用它。

+0

请重写你的问题,我不明白你在问什么。 – Blorgbeard 2010-06-13 12:37:01

+0

什么是“但是无病毒”?这是否意味着“把变量”?你是什​​么意思? – Blorgbeard 2010-06-13 12:37:46

回答

0

我不认为你在做什么会工作。你需要做的是将构造变量的语句转换为适当的条件并将其添加到WHERE子句中。

SELECT RETURNREASONCODEID , RETURNREASONDESC, SITE , SITE_NAME , Factory_id , 
     Factory_Name , Sector_id , sector_name , Customer_name , Customer_id , 
     ITEMID , ITEMNAME , SALESMANID , SALESMAN_NAME , Return_Sales  

FROM dbo.hal_bas_new_rep 

WHERE DATAAREAID [email protected] AND INVOICEDATE >= @DateFrom 
    AND INVOICEDATE <= @DateTo and Report_Activti = @Report_Form 
    AND RETURNREASONCODEID in 
     ( 
      SELECT  Val 
      FROM dbo.fn_String_To_Table(@Report_Parameter,',',1) 
     ) 
    AND (NOT(@All5=0 AND @All4=0 AND @All3=0 AND @All2=0 AND @All1=0 AND @All=1) 
     OR Sector_id = @Sector) 
+0

我不能我可以提供正确的信息 但我做羊毛澄清和解释 我有报告在ssrs和有很多过滤器,如果我得到这个过程它帮助我使报告容易,而不是写相同的选择 很多时间我使用这个函数,但我需要在SQL 2005中没有在其他编 为什么ineed使用这个sting变量因为我有很多过滤器 IF @All5 = 0 AND @All4 = 0 AND @All3 = 0和其他许多变量,当你使用这个字符串变量的帮助你在这里我认为你不能使用执行下的地方或你需要做许多proc和写相同的选择 – bassam 2010-06-14 06:49:39

0

您可以在变量中构建所有查询并使用EXECUTE获取结果。 是可怕的,但工作

相关问题