选择 '' 到底是什么从表A
select '' from TableA
吗?
当我在一个给定的表上运行它时,我得到了表中所有行的记录,这些行显然是''(无列名)'的标题,因为没有使用别名。 我已经看到这个查询在'not exists'语句中用作子查询。
这个查询在什么时候有用?是这样查询的好习惯吗?
例如,当我第一次看到它时,我认为它会返回一个空白行,但实际上它返回表中的所有行,它们是空白的。
我环顾四周,还没有找到答案。 谢谢
选择 '' 到底是什么从表A
select '' from TableA
吗?
当我在一个给定的表上运行它时,我得到了表中所有行的记录,这些行显然是''(无列名)'的标题,因为没有使用别名。 我已经看到这个查询在'not exists'语句中用作子查询。
这个查询在什么时候有用?是这样查询的好习惯吗?
例如,当我第一次看到它时,我认为它会返回一个空白行,但实际上它返回表中的所有行,它们是空白的。
我环顾四周,还没有找到答案。 谢谢
当检查表中是否存在某些内容时,通常选择一个任意值而不是实际列,因为它会影响执行计划(如果选择实际列,则执行计划考虑到该列,即使您不使用该列,也可能需要更长时间)。
最常见的是,我已经看到了1
:
IF EXISTS (SELECT 1 FROM MyTable WHERE SomeColumn > 10)
如果你只关心是否有任何排,可以短路查询,而不是让所有行......虽然我怀疑EXISTS
声明只要找到任何行就会停止。
IF EXISTS (SELECT TOP 1 '' FROM TableA)
谢谢@Fenton我试着检查查询执行计划,它也看到幕后,但没有正确的权限 – DrHouseofSQL
,如果你想添加一个静态值作为查询的一部分,以任何理由
例如你可以使用这个语法
SELECT
'SELECT TOP 10 * FROM '+name
from sys.objects
where type = 'U'
这将创建一个自动创建在数据库中,你拥有所有表的查询
它可以在'EXISTS'有用或'不EXISTS',当它只是检查行存在一些条件 – Lamak
@Lamak谢谢你,我试着检查查询执行计划,看看幕后,但没有正确的权限。 – DrHouseofSQL
它只是检查是否有任何记录返回,与'select 1 from table'相同,并将其与'exists'一起使用可能会提升您的性能,因为如果它找到任何结果然后移动到下一个部分,则不会真的需要关心它是返回所有行的空值 – LONG