4つのパラメーターに基づいてテーブルから情報を取得するストアドプロシージャがあります。
パラメーターに基づいて値を取得したいのですが、パラメーターがNULLの場合、そのパラメーターはチェックされません。 4つのパラメーターがすべてnullの場合、テーブル全体が表示されます。
これは私のSP(ご覧のとおり、これは1つのパラメーターatmでのみ機能します):
CREATE PROCEDURE myProcedure
@Param1 nvarchar(50),
@Param2 nvarchar(50),
@Param3 nvarchar(50),
@Param4 nvarchar(50)
AS
BEGIN
IF(@Param1 IS NULL)
BEGIN
SELECT Id, col1, col2, col3, col4 FROM myTable
END
ELSE
BEGIN
SELECT Id, col1, col2, col3, col4 FROM myTable WHERE col1 LIKE @Param1+'%'
END
END
これを行う方法はありますかなし可能なすべての組み合わせ(15 IF)にIF
を使用しますか?
のようなものはどうですか
SELECT Id, col1, col2, col3, col4
FROM myTable
WHERE col1 LIKE @Param1+'%'
OR @Param1 IS NULL
この特定のケースでは、使用することもできます
SELECT Id, col1, col2, col3, col4
FROM myTable
WHERE col1 LIKE ISNULL(@Param1,'')+'%'
しかし、一般的にあなたは次のようなものを試すことができます
SELECT Id, col1, col2, col3, col4
FROM myTable
WHERE (condition1 OR @Param1 IS NULL)
AND (condition2 OR @Param2 IS NULL)
AND (condition3 OR @Param3 IS NULL)
...
AND (conditionN OR @ParamN IS NULL)
@ param1がcol1のパラメーターであるということを意味する場合、@ param2はcol2のパラメーターです...などこれを試すことができます。
CREATE PROCEDURE myProcedure
@Param1 nvarchar(50),
@Param2 nvarchar(50),
@Param3 nvarchar(50),
@Param4 nvarchar(50)
AS
BEGIN
declare @query nvarchar(4000)
SET @query='SELECT Id, col1, col2, col3, col4 FROM myTable '+
(case when ((@Param1 is null) and (@Param2 is null) and (@Param3 is null) and (@Param4 is null))
then ''
else
'where '+
(case when @Param1 is not null
then ' col1 like '''+@param1+'%'''+
(case when @param2 is not null then ' AND ' else '' end)
else '' end)+
(case when @Param2 is not null
then ' col2 like '''+@param2+'%'''+
(case when @param3 is not null then ' AND ' else '' end)
else '' end)+
(case when @Param3 is not null
then ' col3 like '''+@param3+'%'''+
(case when @param4 is not null then ' AND ' else '' end)
else '' end)+
(case when @Param4 is not null
then ' col4 like '''+@param4+'%'''
else '' end)
end)
exec sp_sqlexec @query
CREATE PROCEDURE myProcedure
@Param1 nvarchar(50),
@Param2 nvarchar(50),
@Param3 nvarchar(50),
@Param4 nvarchar(50)
AS
BEGIN
IF(@Param1 IS NULL)
BEGIN
SELECT Id, col1, col2, col3, col4 FROM myTable
END
ELSE
BEGIN
SELECT Id, col1, col2, col3, col4 FROM myTable WHERE col1 LIKE @Param1+'%' OR @Param1 is Null
END
END
これは役立つはずです
よろしく
アシュトシュアリヤ
SQLサーバーでuse COALESCE()
関数を使用できます。ステートメントでIF- Else
またはCASE
を使用する必要はありません。 COALESCE
functionの使用方法は次のとおりです。
SELECT Id, col1, col2, col3, col4 FROM myTable where col1 = COALESCE(NULLIF(@param1, ''), col1) and col2 = COALESCE(NULLIF(@param2, ''), col2) and col3 = COALESCE(NULLIF(@param3, ''), col3) and col4=
COALESCE(NULLIF(@param4, ''), col4)
SQLのCOALESCE
関数は、引数の中で最初の非NULL式を返します。ここで、たとえば@ param1がnullに等しい場合、関数はcol1を返します。これは、条件が常に真であることを意味する1 = 1のようなwhereステートメントでcol1 = col1になります。
どこに条件を追加し、CASE .. WHEN .. THEN..
次の方法を試してください。
select col1,col2,...colN..from Table
Where clm1 = CASE WHEN @PARAMETER = 0 THEN **COL1** ELSE **@PARAMETER**
条件として同じ列名を設定した後、テーブルから条件値に基づいてパラメータとして渡す場合は、テーブルからすべてのデータを取得します。