2010-06-13 26 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獲取結果。 是可怕的,但工作

相關問題