当您需要我可以使用的动态 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 调用,有时不需要通过 EXACT VALUE调用。例如,我需要 MORE THAN 给定的 accesslevelId 或 LESS THAN。
当前程序只能通过使用处理EXACT值
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 条件。
提前致谢,