Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 返回表示第一个非空字段的整数值_Sql_Sql Server_Tsql_Sql Server 2000 - Fatal编程技术网

Sql 返回表示第一个非空字段的整数值

Sql 返回表示第一个非空字段的整数值,sql,sql-server,tsql,sql-server-2000,Sql,Sql Server,Tsql,Sql Server 2000,我创建了以下存储过程: 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, @S

我创建了以下存储过程:

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
但我还需要能够从以下表列中找到第一个不为null的字段:

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

所以我的问题是——实现这一目标的最佳方式是什么?任何示例都将不胜感激。

没有真正的捷径-只需使用一个表达式:

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 */

这是一个已搜索的
案例
——实际上有两个
案例
的变体。如果所有列都是
NULL
,我猜是5,如果您希望在这种情况下得到
NULL
结果,可以省略
ELSE 5
部分。

没有真正的快捷方式-只需使用表达式:

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 */

这是一个已搜索的
案例
——实际上有两个
案例
的变体。如果所有列都是
NULL
,我猜是5,如果你想在这种情况下得到
NULL
的结果,你可以省略
ELSE 5
部分。

为什么不在数据访问层上执行,而不是在数据层本身上执行呢?!为什么不在数据访问层而不是数据层本身上执行呢+1如果CHARINDEX或PATINDEX是任何依据,则
ELSE 0
也可以是一个选项。+1如果CHARINDEX或PATINDEX是任何依据,则
ELSE 0
也可以是一个选项。