下图是Microsoft SQL Server 2008 R2系统视图的一部分。从图中我们可以看到sys之间的关系。分区
和系统。分配单位取决于系统的值。分配单位。键入
。因此,为了将它们结合在一起,我会写一些类似的东西:
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
但是上面的代码给出了一个语法错误。我想那是因为案例
陈述。谁能帮我解释一下吗?
添加错误消息:
Msg 102,15级,状态1,第6行“=”附近的语法不正确。
试试这个:
...JOIN sys.allocation_units a ON
(a.type=2 AND a.container_id = p.partition_id)
OR (a.type IN (1, 3) AND a.container_id = p.hobt_id)
相反,您只需连接到两个表,并在SELECT子句中从匹配的表返回数据:
我建议您在SQL Server中使用此链接条件联接,并在JOIN ON子句中使用T-SQL Case语句
例如
SELECT *
FROM sys.indexes i
JOIN sys.partitions p
ON i.index_id = p.index_id
JOIN sys.allocation_units a
ON a.container_id =
CASE
WHEN a.type IN (1, 3)
THEN p.hobt_id
WHEN a.type IN (2)
THEN p.partition_id
END
编辑:根据评论。
您不能像现在这样指定联接条件。。检查上面没有错误的查询。我已取出公共列up,右列值将根据条件进行计算。
一个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进行比较。您的语句试图返回赋值或相等性测试的值,在CASE
/THEN
子句的上下文中,这两个值都没有意义。(如果BOOLEAN
是一种数据类型,那么平等性测试就有意义了。)
问题内容: 从此问题派生而来,是否可以对以下SQL语句使用HQL或Criteria: 尽管google提出了一些命中意见,表明HQL支持CASE语句,但是Hibernate 3.6.6失败并显示 QuerySyntaxException:意外令牌:CASE 当我在EntityManager实例上创建上述查询时。 为每个e.type创建另一个查询来手动确定男性人数(例如针对每个e.type)有多少个
问题内容: 我有以下查询: 这返回 我将如何使它工作?说参数是否为“有效”,则返回具有以下条件的记录? 问题答案: 您可以使用另一种方法:
问题内容: 我有一张桌子,我需要按以下方式显示输出。 rsp_ind = 0(表示“新”)和1(表示“ Accepted”(已接受))的行数 输出应为 我尝试使用以下查询。 和即时通讯输出为 有人可以帮助我调整查询以实现输出。注意:我不能为此加上一笔款项。它是更大程序的一部分,因此我无法为此添加超级查询。 问题答案: 您可以在此处查看此请求的输出
如果我为第一个扫描器语句键入字母,我会得到“错误!!”和“输入一个数字”,但不能输入另一个数字。我是一个初学者,不知道输入语句是否可以在catch语句中使用
问题内容: 有什么办法可以在HQL中执行以下操作: 问题答案: 我想你可以(3.6,4.3) [联编辑] …对于那些子句: “简单”情况和“搜索”情况,
问题内容: 我想检查布尔值是否为真,然后在WHERE子句中确定要使用的条件。 假设布尔变量是@checkbool: 有否否定条件的方法?像在C ++中一样,您可以执行!(condition)。 如果不是,解决此问题的最佳方法是什么? 谢谢! 问题答案: SQL在C中的等效项是。但是,在您的情况下,您还需要其他东西:您需要建立一个条件,该条件根据的值在两个选择之间做出决定,如下所示: