任何人都可以指出如何檢查選擇查詢是否返回非空結果集?簡單檢查SELECT查詢空結果
比如我有一個查詢:
SELECT * FROM service s WHERE s.service_id = ?;
我應該這樣做下一篇:
ISNULL(SELECT * FROM service s WHERE s.service_id = ?)
測試如果結果集是不是空的?
任何人都可以指出如何檢查選擇查詢是否返回非空結果集?簡單檢查SELECT查詢空結果
比如我有一個查詢:
SELECT * FROM service s WHERE s.service_id = ?;
我應該這樣做下一篇:
ISNULL(SELECT * FROM service s WHERE s.service_id = ?)
測試如果結果集是不是空的?
使用@ @ROWCOUNT:
SELECT * FROM service s WHERE s.service_id = ?;
IF @@ROWCOUNT > 0
-- do stuff here.....
返回最後一條語句受 影響的行數。如果 行的數量超過20億,請使用 ROWCOUNT_BIG。
這是安靜直接的,我喜歡它。這就是我所期待的。謝謝。 – 2010-05-21 20:37:36
值得注意的是,@@ ROWCOUNT僅在Transact-SQL中可用 – MatrixManAtYrService 2015-09-21 19:35:06
@MatrixManAtYrService:是 - 此問題** IS **關於使用T-SQL的SQL Server .... – 2015-09-21 20:19:26
IF EXISTS(SELECT * FROM service s WHERE s.service_id = ?)
BEGIN
--DO STUFF HERE
END
爲了提高效率,將'SELECT *'更改爲'SELECT TOP 1 *' – 2010-05-21 19:49:18
@Ed B:這並不重要,因爲EXISTS在第一次成功匹配時返回true。使用'EXISTS(SELECT 1/0 FROM SERVICE ...')進行測試 - 它應該返回一個不能被0除的分支,但它不會被 – 2010-05-21 20:04:39
@Ed B&@OMG Ponies,是的,我認爲SQL Server足夠智能優化'EXISTS(SELECT *'或'EXISTS(SELECT 1'或'EXISTS(SELECT 1/0') – 2010-05-21 20:08:50
SELECT count(*) as count FROM service s WHERE s.service_id = ?;
如果測試計數== 0。
更多baroquely:
選擇情況下(?SELECT COUNT(*)作爲計數從服務中S其中s.service_id =)= 0 然後 '!沒有行,兄弟'否則「你有數據「結束的stupid_message;
我跟埃德B.同意你應該使用EXISTS方法,但更有效的方式來做到這一點是:
IF EXISTS(SELECT 1 FROM service s WHERE s.service_id = ?)
BEGIN
--DO STUFF HERE
END
HTH
If你同意,你應該投票支持這個答案,而不是重新發布相同的內容... – 2010-05-21 19:38:27
@OMG小馬:它是不一樣的,他把*改成了1. – 2010-05-21 19:44:11
那麼,使用「(SELECT TOP 1 * ...」比使用「SELECT 1 ...」更有效率 – 2010-05-21 19:48:06
嘗試:
SELECT * FROM service s WHERE s.service_id = ?;
IF @@ROWCOUNT=0
BEGIN
PRINT 'no rows!'
END
總結文章下方的一點:
如果所有你關心的是,如果至少一個匹配行是在數據庫中,然後使用exists
,因爲它是最有效的方法來檢查它:只要找到至少一個匹配的行,它就會返回true,而count
等將找到所有匹配的行。
如果您確實需要使用數據進行處理,或者查詢有副作用,或者您需要知道實際的總行數,那麼檢查ROWCOUNT
或count
可能是最好的方法。
SELECT COUNT(1) FROM service s WHERE s.service_id = ?
與count(*)的區別是什麼? – liang 2013-05-10 00:50:01
SELECT * FROM service s WHERE s.service_id = ?;
IF @@rowcount = 0
begin
select 'no data'
end
在我的SQL使用信息功能
select FOUND_ROWS();
它將返回無。通過select查詢返回的行。
您可以通過多種方式來完成。
IF EXISTS(select * from ....)
begin
-- select * from ....
end
else
-- do something
或者你可以使用IF NOT EXISTS , @@ROW_COUNT
像
select * from ....
IF(@@ROW_COUNT>0)
begin
-- do something
end
你到底想幹什麼?在做檢查後你會做什麼? – 2010-05-21 19:42:23
不清楚你是否想返回一個結果集,然後檢查是否有行是int,或者你只是想檢查一個查詢是否返回沒有結果集的行? – 2010-05-21 19:53:29
我想知道,如果結果集中有任何行。 – 2010-05-21 20:32:01