動的WHERE句が必要な場合は、私が使用できます。
CREATE PROCEDURE [dbo].[sp_sel_Articles]
@articleId INT = NULL
, @title NVARCHAR(250) = NULL
, @accessLevelId INT = NULL
AS
BEGIN
SELECT *
FROM table_Articles Art
WHERE
(Art.ArticleId = @articleId OR @articleId IS NULL)
AND (Art.Title LIKE '%' + @title + '%' OR @title IS NULL)
AND (Art.AccessLevelId = @accessLevelId OR @accessLevelId IS NULL)
END
したがって、このプロシージャを呼び出すことができます-たとえば-ArticleIdによってのみ
EXEC [sp_sel_Articles] @articleId = 3
ただし、AccessLevelIdで呼び出す必要がある場合もあれば、正確な値では呼び出さない場合もあります。たとえば、指定されたaccesslevelIdより多くまたはLESSTHANが必要になります。
現在の手順では、使用することによってのみ正確な値を処理できます
Art.AccessLevelId = @accessLevelId
プロシージャにCONDITIONタイプと値を指定することもできますか?この例では非常に奇妙に思えるかもしれませんが、ご容赦ください。
CREATE PROCEDURE [dbo].[sp_sel_Articles]
@articleId INT = NULL
, @title NVARCHAR(250) = NULL
, @accessLevelId INT = NULL
, **@accessLevelIdCondition**
AS
BEGIN
SELECT *
FROM table_Articles Art
WHERE
(Art.ArticleId = @articleId OR @articleId IS NULL)
AND (Art.Title LIKE '%' + @title + '%' OR @title IS NULL)
AND (Art.AccessLevelId **@accessLevelIdCondition** @accessLevelId OR @accessLevelId IS NULL)
END
たぶん関数が使えるのか、わかりません。この柔軟性を必要とするプロシージャは少なくとも20あるので、すべてのプロシージャにIF ELSE条件を記述するのではなく、可能な限り、より優れた、よりグローバルなソリューションが必要になります。
前もって感謝します、