мне нужно использовать строковую переменную в Proc в базе данных SQL Server 2005 - PullRequest
0 голосов
/ 13 июня 2010

У меня есть эта процедура

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 =@COMPANYID 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 =@COMPANYID 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 в переменной, но я не знаю, как его использовать.

Ответы [ 2 ]

0 голосов
/ 13 июня 2010

Вы можете построить весь свой запрос в переменной и использовать EXECUTE, чтобы получить результат.Это ужасно, но работа

0 голосов
/ 13 июня 2010

Я не думаю, что то, что вы делаете, сработает. Что вам нужно сделать, это превратить оператор, который создает переменную, в соответствующее условие и добавить его в ваше предложение 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 =@COMPANYID 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...