2017-10-18 20 views
1

选择 '' 到底是什么从表A

select '' from TableA 

吗?

当我在一个给定的表上运行它时,我得到了表中所有行的记录,这些行显然是''(无列名)'的标题,因为没有使用别名。 我已经看到这个查询在'not exists'语句中用作子查询。

这个查询在什么时候有用?是这样查询的好习惯吗?

例如,当我第一次看到它时,我认为它会返回一个空白行,但实际上它返回表中的所有行,它们是空白的。

我环顾四周,还没有找到答案。 谢谢

+1

它可以在'EXISTS'有用或'不EXISTS',当它只是检查行存在一些条件 – Lamak

+0

@Lamak谢谢你,我试着检查查询执行计划,看看幕后,但没有正确的权限。 – DrHouseofSQL

+1

它只是检查是否有任何记录返回,与'select 1 from table'相同,并将其与'exists'一起使用可能会提升您的性能,因为如果它找到任何结果然后移动到下一个部分,则不会真的需要关心它是返回所有行的空值 – LONG

回答

2

当检查表中是否存在某些内容时,通常选择一个任意值而不是实际列,因为它会影响执行计划(如果选择实际列,则执行计划考虑到该列,即使您不使用该列,也可能需要更长时间)。

最常见的是,我已经看到了1

IF EXISTS (SELECT 1 FROM MyTable WHERE SomeColumn > 10) 

如果你只关心是否有任何,可以短路查询,而不是让所有行......虽然我怀疑EXISTS声明只要找到任何行就会停止。

IF EXISTS (SELECT TOP 1 '' FROM TableA) 
+0

谢谢@Fenton我试着检查查询执行计划,它也看到幕后,但没有正确的权限 – DrHouseofSQL

0

,如果你想添加一个静态值作为查询的一部分,以任何理由

例如你可以使用这个语法

SELECT 
    'SELECT TOP 10 * FROM '+name 
from sys.objects 
where type = 'U' 

这将创建一个自动创建在数据库中,你拥有所有表的查询

相关问题