在存储过程中编写动态where子句

pmi*_*lio 1 sql stored-procedures

嗨,我有一个存储过程,它将有一个动态子句,这就是我的存储过程的样子;

SELECT  Comment.AddDate,Event.StartTime,Users.Name
FROM Comment
JOIN Users on Users.USERS_ID  = Comment.UserID
JOIN Event ON Users.USERS_ID = Event.UserID
Run Code Online (Sandbox Code Playgroud)

如果我传递变量@Name,那么存储过程应该如下所示;

SELECT  Comment.AddDate,Event.StartTime,Users.Name
FROM Comment
JOIN Users on Users.USERS_ID  = Comment.UserID
JOIN Event ON Users.USERS_ID = Event.UserID
WHERE Name = @Name
Run Code Online (Sandbox Code Playgroud)

但是有些情况下,传入的@Name i将为空,这意味着我希望返回所有内容而不是基于特定名称.

在某些情况下我也会传递一个偶数,我该怎么做呢?

sel*_*dog 5

您可以COALESCE在where子句中使用该函数来使用变量或现有值,例如:

WHERE Name = COALESCE(NULLIF(@Name, ''), Name) AND EventID = COALESCE(@EventID, EventID)

更新:

NULLIFCOALESCE其中添加了一个函数,该函数表示如果@Name的值为空字符串,则将其视为NULL,从而允许COALESCE函数正常工作.

  • 这没有意义.COALESCE本质上表示如果@Name为NULL,则使用当前Name值,该值导致Name = Name,该值应始终为true. (2认同)