';形状-追加';现在查询等价性

本文关键字:查询 追加 形状 | 更新日期: 2023-09-27 18:23:42

在过去的几周里,我一直在将用VB编写的程序转换为C#。在一些地方,我注意到查询的书写方式很奇怪,出现了"Shape"answers"Append"两个词。例如:

SHAPE {SELECT Test, IdQuestion, QuestionName, QuestionTimeLimit, ImageLocation 
FROM dbo.userViewConTestQues 
WHERE (Test = 5) ORDER BY QuestionOrder} AS ParentCMD APPEND ({SELECT Answer, 
IdAnswer, Question FROM dbo.userAnswers } AS ChildCMD RELATE IdQuestion TO Question) AS ChildCMD

我完全确信该查询的等价项是INNER JOIN,类似于:

SELECT A.Test, A.IdQuestion, A.QuestionName, A.QuestionTimeLimit, A.ImageLocation,
B.Answer, B.IdAnswer FROM dbo.userViewConTestQues A INNER JOIN 
dbo.userAnswers B ON A.IdQuestion=B.Question WHERE A.Test=5 ORDER BY A.QuestionOrder

经过调试,我得到了以下结果:旧程序的记录数是60,也就是60行,而运行我编写的新查询得到了400多行,所以我想我错了。现在的"形状附加"等价物是什么?

编辑:60行只属于父记录集,但是子记录集的计数是6,但我不知道如何获取它们。

';形状-追加';现在查询等价性

如果我没记错的话,SHAPE APPEND与父-子数据相关,结果是您实际上为每个父行获得了一个子记录集。在使用结果时,您必须检查该记录集并对其进行适当处理(如果网格还不支持它)。

当你说60行时,是否可能只计算父记录集?

即使子记录集中没有行,它也会从父记录集中为您提供一条记录,因此它更像LEFT OUTER JOIN,但实际上没有一个直接的SQL等价物可以为您提供SHAPE APPEND那样的层次结构结果。

如果您想继续使用SHAPE APPEND,OleDbConnection和OleDbDataAdapter仍然支持该语法,但您必须将Provider=MSDataShape添加到连接字符串中。然后,当获取行时,您将在父DataRow上使用GetChildRows()来获取子行。