这是我的SQL Server存储过程代码:
SELECT NOTES as DeletionNote
FROM STCRCHF_LOG
WHERE STHTR_ = @transferNo
IF ( @@ROWCOUNT = 0)
如果找到数据,我只想返回NOTES的字符串。否则,如果没有数据,我只想返回一个空字符串或null。
屏幕截图(已执行的存储过程):
如果找到数据。在我的Web服务器端程序中,它获取数据。
如果没有数据。在我的Web服务器端程序中,它会导致NullReferenceException
答案 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查询中进行更改的情况。