Select语句return如果有值如果没有值
Select statement return if there is a value and if there is no value
这是我的 SQL 服务器存储过程的代码:
SELECT NOTES as DeletionNote
FROM STCRCHF_LOG
WHERE STHTR_ = @transferNo
IF ( @@ROWCOUNT = 0)
如果找到数据,我只想return NOTES 的字符串。否则,如果它没有数据,我只想 return 一个空字符串或 null。
截图(执行存储过程):
如果找到数据。在我的 Web 服务器端程序中,它获取数据。
如果没有数据。在我的 Web 服务器端程序中,它导致 NullReferenceException
如果只有一条记录是可能的,则:
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)
检查 If(DataTable.Rows.Count >0)
检查您的网络编程水平以避免 NullReferenceException
。根据条件,您可以决定如何处理网络程序的进一步逻辑。
从编程层面处理此类异常总是明智的做法。想一想其他人在 SQL 查询中进行更改而不知道代码的 Web 使用效果的情况。
我喜欢的另一种方法是使用虚拟值并像这样在外部应用。
-- 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;
这是我的 SQL 服务器存储过程的代码:
SELECT NOTES as DeletionNote
FROM STCRCHF_LOG
WHERE STHTR_ = @transferNo
IF ( @@ROWCOUNT = 0)
如果找到数据,我只想return NOTES 的字符串。否则,如果它没有数据,我只想 return 一个空字符串或 null。
截图(执行存储过程):
如果找到数据。在我的 Web 服务器端程序中,它获取数据。
如果没有数据。在我的 Web 服务器端程序中,它导致 NullReferenceException
如果只有一条记录是可能的,则:
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)
检查 If(DataTable.Rows.Count >0)
检查您的网络编程水平以避免 NullReferenceException
。根据条件,您可以决定如何处理网络程序的进一步逻辑。
从编程层面处理此类异常总是明智的做法。想一想其他人在 SQL 查询中进行更改而不知道代码的 Web 使用效果的情况。
我喜欢的另一种方法是使用虚拟值并像这样在外部应用。
-- 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;