如果有值和无值,如何使select语句返回

时间:2018-11-06 05:56:46

标签: sql-server tsql stored-procedures ssms-2017

这是我的SQL Server存储过程代码:

SELECT NOTES as DeletionNote 
FROM STCRCHF_LOG 
WHERE STHTR_ =  @transferNo

IF ( @@ROWCOUNT = 0) 

如果找到数据,我只想返回NOTES的字符串。否则,如果没有数据,我只想返回一个空字符串或null。

屏幕截图(已执行的存储过程):

如果找到数据。在我的Web服务器端程序中,它获取数据。

If there is a data

如果没有数据。在我的Web服务器端程序中,它会导致NullReferenceException

if there is no data

3 个答案:

答案 0 :(得分:4)

如果只有一条记录,那么:

select coalesce((SELECT NOTES FROM STCRCHF_LOG 
WHERE STHTR_ =  @transferNo), '') as DeletionNote

如果可能有多个记录,则以下内容将确保至少返回一行:

SELECT NOTES as DeletionNote FROM STCRCHF_LOG WHERE STHTR_ =  @transferNo
union all select '' /* or null if preferred */ where not exists (SELECT 1 FROM STCRCHF_LOG WHERE STHTR_ =  @transferNo)

答案 1 :(得分:1)

我喜欢的另一种方法是使用虚拟值,并像这样使用OUTER APPLY。

-- sample data
DECLARE @table TABLE (someId INT IDENTITY, Col1 VARCHAR(100));
INSERT @table(Col1) VALUES ('record 1'),('record 2');

DECLARE @id INT = 11;

SELECT f.Col1
FROM   (VALUES(NULL)) AS dummy(x)
OUTER APPLY 
(
  SELECT t.Col1
  FROM   @table AS t
  WHERE t.someId = @id
) AS f;

答案 2 :(得分:0)

在您的Web编程级别检查If(DataTable.Rows.Count> 0)检查以避免NullReferenceException。根据条件,您可以决定如何处理Web程序中的其他逻辑。

从编程级别处理此类异常总是明智的想法。想一想其他人在不知道代码的Web使用效果的情况下在SQL查询中进行更改的情况。