當您需要動態WHERE子句時,我可以使用;SQL,如何使用動態條件邏輯?
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例 - ONLY
EXEC [sp_sel_Articles] @articleId = 3
但是,有時我需要通過AccessLevelId調用有時NOT價值。例如,我需要超過給定的accesslevelId或LESS THAN。
當前程序可以ONLY使用
Art.AccessLevelId = @accessLevelId
也是可能給予條件類型以及值到程序處理EXACT價值?這似乎在這個例子很奇怪,但請和我一起承擔:
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條件。
在此先感謝,
不要調用你的SP sp _.... http://msdn.microsoft.com/en-us/library/dd172115.aspx – podiluska 2012-07-09 13:06:37