2012-04-25 19 views
0

はのは、私は不動産のウェブサイトを持っていると、デフォルトのページでは、私は、ユーザーが自分のパラメータ、動的SQLクエリ

にフィットするポストの数を取得するようにしたいとしましょう、私は a link to an example image

追加カウンタはすべての変更に反応し、ユーザーに自動的に番号を表示する必要があります(これはajax jqueryで行います)

私はクエリを書きましたが、すべてのパラメータが入力されている場合にのみ機能し、数少ないがまだカウンターを稼ぐ

ここ

は、クエリ

ALTER PROCEDURE shahar30_nadlan.CountPropertyResultsByquery 


@AreaID   int, 
@DealID  int, 
@PropertyTypeId int, 
@FieldMax  int, 
@FieldMin  int, 
@RoomsMax  decimal, 
@RoomsMin  decimal, 
@PriceMax  int, 
@PriceMin  int, 
@ParkingSpace bit, 
@Elevator  bit, 
@Aircondition bit, 
@Furniture  bit, 
@Warehouse  bit, 
@Balkony  bit, 
@handicapped bit, 
@Immediate bit, 
@Description NVARCHAR(MAX) 

AS 
BEGIN 


select count(*) from Tbl_Property 
where AreaID  = @AreaID   and 
    DealID  = @DealID   and 
    PropertyTypeId= @PropertyTypeId and 
    Field <= @FieldMax  and 
    Field >= @FieldMin  and 
    Rooms <= @RoomsMax  and 
    Rooms >= @RoomsMin  and 
    Price <= @PriceMax  and 
    Price >= @PriceMin  and 
    ParkingSpace = @ParkingSpace and 
    Elevator = @Elevator  and 
    Aircondition = @Aircondition and 
    Furniture = @Furniture  and 
    Warehouse = @Warehouse  and 
    Balkony = @Balkony  and 
    handicapped = @handicapped and 
    [Immediate] = @Immediate  and 
    Description like '%' + @Description + '%' 

END 

で、 シャハルのnardiaをお願いします。

答えて

2

ないすべてのパラメータがnullのように、値波平供給場合

に充填されなければならない(それがデフォルトのvalを持っていない限り)、その後:

あなたが使うべきパターンは次のとおりです。

select * from myTable where 

( @companyId IS NULL OR (companyId = @companyId)) 
and 
(@Name IS NULL OR (Name = @Name)) 
and 
... 

または

( companyId = isnull(@companyId,companyId)) 
     and 
    ( Name = isnull(@Name ,Name)) 
     and 

    ... 

合体もここでも使用できますが、遅くなります。 (nullより)

+0

なぜ 'COALESCE()'が遅くなるのですか? –

+0

@ypercubeこれはテスト済みだからhttp://sqlserverperformance.idera.com/tsql-optimization/performance-coalesce-null/ –

+0

そのブログは 'COALESCE()'と 'IS NULL'を比較します。 'ISNULL() 'ではない –

2

オプションのパラメータを試しましたか?ここでの例です:

@PriceMin  int = 1, 

あなたは、あなたがしたいだけなパラメータを渡すと、デフォルト値を取るように残りの部分を残して、そのようにデフォルト値を設定することができます。