我创建了以下存储过程:
ALTER PROCEDURE [dbo].[ExampleSP]
(
@SearchText NVARCHAR(4000),
@ID INT = NULL
)
AS
BEGIN
SET NOCOUNT ON;
SELECT
deID,
deTitle
FROM tblDemo As de
LEFT JOIN tblLinkTable As lnk ON (lnk.ID = de.deID)
WHERE CONTAINS(cstKeywords, @SearchText)
AND ((@ID IS NULL) OR (lnk.ID = @ID))
GROUP BY deID,Title
ORDER BY de.Title
但是我还需要能够在下面的表列中找到第一个非空的字段:
deIntroText,deCompanyText,deTimetableText和deExampleText
我需要为从SELECT返回的每条记录执行此操作。
所以我意识到我需要创建一个临时列来存储它,我想你需要使用这样的IF语句:
IF deIntroText IS NOT Null
THEN TempFieldToReturn = 1
ELSE IF deCompanyText IS NOT Null
THEN TempFieldToReturn = 2
ELSE IF deTimetableText IS NOT Null
THEN TempFieldToReturn = 3
ELSE IF deExampleText IS NOT Null
THEN TempFieldToReturn = 4
所以我的问题是 - 实现这一目标的最佳方法是什么?任何例子都将不胜感激。
答案 0 :(得分:4)
没有真正的捷径 - 只需使用CASE
表达式:
SELECT
/* Other Columns */
CASE
WHEN deIntroText IS NOT Null THEN 1
WHEN deCompanyText IS NOT Null THEN 2
WHEN deTimetableText IS NOT Null THEN 3
WHEN deExampleText IS NOT Null THEN 4
ELSE 5 END as OtherColumn
FROM
/* Rest of query */
这是搜索CASE
- 实际上有CASE
的两种变体。如果所有列都是NULL
,我猜测为5 - 如果您希望在这种情况下获得ELSE 5
结果,则可能会离开NULL
部分。