如何检查SQL列是否有价值?

Mic*_*ael 3 t-sql sql-server

我使用Microsoft SQL Server2012。我需要检查SiteObjects数据库中命名的表是否至少有一条记录,其中命名为SiteRegionId的值等于22

如果是这样,则必须注入一些逻辑;如果不是,则必须实现另一个逻辑。

这是我的实现:

IF EXISTS (SELECT * FROM SiteObjects WHERE SiteRegionId = 22)
BEGIN
    ----do what you need if exists
    RETURN '0'; --not deleted
END
ELSE
BEGIN
    --do what needs to be done if not
    DELETE FROM SiteRegions 
    WHERE Id = 22;

    RETURN '1';
END
Run Code Online (Sandbox Code Playgroud)

我认为这一行:

SELECT * FROM SiteObjects WHERE SiteRegionId = 22
Run Code Online (Sandbox Code Playgroud)

之所以无效,是因为据我了解它可以在所有表​​行上运行并选择SiteRegionId等于22的所有行。是否有任何方法可以使其更有效?并检查是否有任何行满足条件,请继续。

Dam*_*ver 5

不,EXISTS只要观察到一行,就足够聪明以返回true。而且系统知道实际上没有检索到任何列数据。

上世纪90年代,一些优化器和数据库系统还不够智能,无法识别这种情况,但是我现在还没有发现实际上可以检索所有数据的任何信息。(当然,对于SQL Server系列,它在产品的2000版本之前已修复。)

因此,其他答案中的建议是十多年前的遗留建议。

请参阅存在的子查询

子查询实际上不会产生任何数据

...

  • EXISTS引入的子查询的选择列表几乎总是由星号(*)组成。没有理由列出列名,因为您只是在测试是否存在满足子查询中指定条件的行。