Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2005 这种方法是否经过优化以检索数据库中不存在的值?_Sql Server 2005_Common Table Expression - Fatal编程技术网

Sql server 2005 这种方法是否经过优化以检索数据库中不存在的值?

Sql server 2005 这种方法是否经过优化以检索数据库中不存在的值?,sql-server-2005,common-table-expression,Sql Server 2005,Common Table Expression,为了检索不在db中的值,我使用如下公共表表达式: ;WITH new_id (id) AS ( SELECT '0x01' UNION ALL SELECT '0x00' UNION ALL SELECT '0x03' UNION ALL SELECT '0x04' UNION ALL SELECT '0x05' ) SELECT id AS p FROM new_id ni EXCEPT(SELECT id FROM table) 这是检索未存储在DB中的值的优化

为了检索不在db中的值,我使用如下公共表表达式:

;WITH new_id (id) AS (
  SELECT '0x01'
  UNION ALL SELECT '0x00'
  UNION ALL SELECT '0x03'
  UNION ALL SELECT '0x04'
  UNION ALL SELECT '0x05'
)

SELECT  id AS p
FROM   new_id ni EXCEPT(SELECT id FROM table)
这是检索未存储在DB中的值的优化方法吗

亲切问候,

弗洛里安那应该没问题

对于大量的行(特别是当它们包含长字符串值时),我注意到这些内部常量表可以,但我怀疑您是否会在30行中遇到这个问题

从这方面的快速测试来看,它们比表变量有优势,因为SQLServer似乎维护了一些关于它们的统计信息,因此可以选择适当的联接类型

我刚刚尝试了一个包含500行和50个不同值的CTE,下面计划中估计的行数是正确的。(虽然在编译时解决了所有这些问题,并可能为此生成了一个独特的
id
s列表,这有点令人遗憾,但SQL Server并没有将其替换到计划中,而不是在运行时再次执行)


为什么不使用内存表(@table\u vaiable)而不是CTE?CTE中通常有多少行@凯恩
@table_变量
不在内存表中(或者它们可能在内存表中,但不超过
#temp
表)@Martin Smith:我想最多30行