下图是 Microsoft SQL Server 2008 R2 系统视图的一部分。从图中我们可以看出,之间的关系sys.partitions
and sys.allocation_units
取决于的值sys.allocation_units.type
。因此,为了将它们结合在一起,我会写一些类似的内容:
SELECT *
FROM sys.indexes i
JOIN sys.partitions p
ON i.index_id = p.index_id
JOIN sys.allocation_units a
ON CASE
WHEN a.type IN (1, 3)
THEN a.container_id = p.hobt_id
WHEN a.type IN (2)
THEN a.container_id = p.partition_id
END
但上面的代码给出了语法错误。我想那是因为CASE
陈述。
谁能帮忙解释一下吗?
添加错误信息:
消息 102,级别 15,状态 1,第 6 行“=”附近的语法不正确。
A CASE
表达式返回一个值THEN
该条款的一部分。你可以这样使用它:
SELECT *
FROM sys.indexes i
JOIN sys.partitions p
ON i.index_id = p.index_id
JOIN sys.allocation_units a
ON CASE
WHEN a.type IN (1, 3) AND a.container_id = p.hobt_id THEN 1
WHEN a.type IN (2) AND a.container_id = p.partition_id THEN 1
ELSE 0
END = 1
请注意,您需要对返回值执行一些操作,例如将其与 1 进行比较。您的语句试图返回赋值的值或测试是否相等,这两者在 a 的上下文中都没有意义。CASE
/THEN
条款。 (如果BOOLEAN
是一种数据类型,那么相等性测试就有意义。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)