-1

Date 型の 10 個のパラメーターを受け取るストアド プロシージャがありますが、このコンサルトですべてのクライアントの情報の流れを表示する必要があるため、コンサルトが null の場合に情報を表示できます。クライアントがクレジットノート付きの注文をすることもありますが、注文だけでクレジットノートを持っていないこともあります...私はWhere句のためにこれを行います:

        WHERE 
                (Customer.cd_CustomerID = ISNULL(@customer, Customer.cd_CustomerID))
                AND (@orderID IS NULL OR Orders.cd_OrderID = @orderID)
                AND (@Location IS NULL OR CustomerSL.cd_LocID = @Location)      
                and (Convert(date,Orders.fh_Date,111) BETWEEN coalesce (@FechaPedido1,'1900-01-01') AND  coalesce (@FechaPedido2,'3000-12-31' ))
                and (Convert(date,Receipt.fh_Date,111) BETWEEN coalesce (@FechaRemision1,'1900-01-01') AND  coalesce (@FechaRemision2,'3000-12-31' )) 
                and (Convert(date,Invoice.fh_Date,111) BETWEEN coalesce (@FechaFactura1,'1900-01-01') AND  coalesce (@FechaFactura2,'3000-12-31' )) 
                and (Convert(date,CreditNote.fh_Date,111) BETWEEN coalesce (@FechaNotaCredito1,'1900-01-01') AND  coalesce (@FechaNotaCredito2,'3000-12-31' ))
                and (Convert(date,Dispersion.fc_CreatedDate,111) BETWEEN coalesce (@FechaDispersion1,'1900-01-01') AND  coalesce (@FechaDispersion2,'3000-12-31' ))

ただし、この場合、クライアントのすべてのフローを含む情報のみを表示します。コンサルトでは、Remissions または Dispersion のない注文を持っていない情報の流れが示されません。どのような場合でも... Where で IF を使用して試してみてください。ただし、構文に問題があります...

if (@fechapedido1 is null) begin (Convert(date,Orders.fh_Date,111) BETWEEN @FechaPedido1 and @FechaPedido2)
end

SQL サーバーに、「キーワード 'Convert' 付近の構文が正しくありません。」というメッセージが表示されます。しかし、その行は正しいです... :S 助けてください:D ありがとう:D

4

1 に答える 1

2

句にIFステートメントを含めることはできません。これを試してください:WHERE

AND 
(
    (
        @fechapedido1 is null AND 
        Convert(date,Orders.fh_Date,111) BETWEEN @FechaPedido1 and @FechaPedido2
    ) OR
    @fechapedido1 is not null 
)
于 2012-10-30T16:48:49.213 に答える