Col*_*las 4 sql sql-server sql-server-2008
在我正在编写的程序中,我需要检查表是否为空.我目前只有一个基本的SQL执行语句
Count(asterisk) from Table
Run Code Online (Sandbox Code Playgroud)
然后我有一个fetch方法来获取这一行,把它Count(asterisk)放入一个参数,这样我就可以检查它(如果count(*)<1则出错,因为这意味着表是空的).平均而言,count(asterisk)将返回大约11,000行.这样的事情会更有效吗?
select count(*)
from (select top 1 *
from TABLE)
Run Code Online (Sandbox Code Playgroud)
但我不能让它在Microsoft SQL Server中工作
这将返回1或0,并且我将能够在执行语句时使用我的编程语言对此进行检查,并且我获取count参数以查看TABLE是否为空.
欢迎提出任何意见,想法或疑虑.
如果表格为空,您正在寻找指示.为此,SQL具有EXISTS关键字.如果您在存储过程中执行此操作,请使用以下模式:
IF(NOT EXISTS(SELECT 1 FROM dbo.MyTable))
BEGIN
RAISERROR('MyError',16,10);
END;
Run Code Online (Sandbox Code Playgroud)
如果您返回指标以在应用内进行相应操作,请使用以下模式:
SELECT CASE WHEN EXISTS(SELECT 1 FROM dbo.MyTable) THEN 0 ELSE 1 END AS IsEmpty;
Run Code Online (Sandbox Code Playgroud)
虽然大多数其他反应也会产生预期的结果,但它们似乎模糊了意图.
小智 8
请在检查是否存在时使用 top 1,因为如果没有它,您将拥有与记录数量一样多的“1”:
IF NOT EXISTS(select top 1 1 from Table)
BEGIN
RAISERROR('Error',0,1);
END;
Run Code Online (Sandbox Code Playgroud)
你可以尝试这样的事情:
select count(1) where exists (select * from t)
Run Code Online (Sandbox Code Playgroud)
在SQLFiddle上测试过
| 归档时间: |
|
| 查看次数: |
6911 次 |
| 最近记录: |