您好我有一个存储过程,它将有一个动态子句,这就是我的存储过程的样子;
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
如果我传递一个变量@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
但是有些情况下,我传入的@Name将为空,这意味着我希望返回所有内容而不是基于特定名称。
同样在某些情况下,我也会传递一个偶数,我该怎么做呢?
答案 0 :(得分:5)
您可以在where子句中使用COALESCE
函数来使用变量或现有值,例如:
WHERE Name = COALESCE(NULLIF(@Name, ''), Name)
AND EventID = COALESCE(@EventID, EventID)
<强>更新强>
我在NULLIF
中添加了COALESCE
函数,该函数表示如果@Name的值为空字符串,则将其视为NULL,从而允许COALESCE
函数正常工作。
答案 1 :(得分:3)
WHERE (@Name IS NULL OR Name = @Name)
答案 2 :(得分:0)
不需要动态sql,只需尝试:
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 IS NULL OR Name = @Name)
OR (@Id IS NULL OR Id=@Id)
如果@var IS NULL
谓词未提供,则column = @var
应该短路{{1}}谓词,这意味着您可以提供任一参数来选择行