1

テーブルにビット型の列「ステータス」があり、パラメーターの宣言でデフォルトを0に設定し、デフォルトでnullに設定された他のパラメーターはほとんどありません

 @FirstName varchar(20) = null,
 @LastName varchar(20) = null,
 @Status bit = 0

私のSQLは次のようなものです

 Select * from customers where 
 (ISNULL(@FirstName,'') =''  OR  FirstName= @FirstName)
 AND (ISNULL(@LastName,'') =''  OR  LastName= @LastName)
 AND (Status = @Status)

@FirstName の値のみがコードから送信され、テーブルの列 "Status = 1" の値が送信され、@Status の値が送信されない場合、@Status のデフォルトは 0 であるため、レコードは返されません。ビット型のパラメータが送信されず、テーブル内の値が 1 である状況で、ビット型を処理する方法。

4

1 に答える 1

1

@status他のパラメータと同様に、パラメータのデフォルト値を に設定できnullます。

@Status bit = null

これを行うことで、フィルターを合理化できます

 where
     isnull(@firstname, Firstname) = FirstName
 and
     isnull(@LastName, LastName) = LastName
 and 
     isnull(@Status, Status) = Status

これと元のクエリの両方で、データベースの値が null である行は返されません。

于 2013-10-18T13:22:18.480 に答える