Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/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_Sql_Oop - Fatal编程技术网

嵌套记录是sql server

嵌套记录是sql server,sql,oop,Sql,Oop,上述查询提供了此错误: 子查询返回了多个值。当子查询在=、!=、=或者在使用子查询时 有人能解释为什么存在这种限制吗 我的想法是,这种多维查询非常适合直接从数据库构建OO对象,只需一个查询 编辑: 这个问题相当理论化。为了解决这个实际问题,我将使用一个连接或简单地完成两个查询,但我想知道是否有什么东西阻止您将列作为表类型返回(在SQLServer2008中,您可以创建表类型) 假设代码中有相应的类,想想Linq2Sql select Table1.colID, Table1.colName,

上述查询提供了此错误: 子查询返回了多个值。当子查询在=、!=、=或者在使用子查询时

有人能解释为什么存在这种限制吗

我的想法是,这种多维查询非常适合直接从数据库构建OO对象,只需一个查询

编辑:

这个问题相当理论化。为了解决这个实际问题,我将使用一个连接或简单地完成两个查询,但我想知道是否有什么东西阻止您将列作为表类型返回(在SQLServer2008中,您可以创建表类型)

假设代码中有相应的类,想想Linq2Sql

select Table1.colID, Table1.colName, 
(select * from Table2 where Table2.colID = Table1.colID) as NestedRows
from Table1
公共类表1
{
公共int colID,
公共字符串colName,
公共清单2;
}

我希望能够用一个查询直接填充这个类的实例,您最好在两个表之间使用一个内部联接,只需从每个表中选择所需的行

public class Table1
{
  public int colID,
  public string colName,
  public List<Table2> table2s;
}

但是,请记住,表1中的数据将针对表2中的每个匹配记录重复。虽然我相信我发布的查询将以您正在寻找的形式获取数据,但我认为这不是查询数据库的最佳方法。我要么执行单独的查询,要么将单独的查询放入存储过程并返回多个结果集。

最好在两个表之间使用内部联接,并从每个表中选择所需的行

public class Table1
{
  public int colID,
  public string colName,
  public List<Table2> table2s;
}

但是,请记住,表1中的数据将针对表2中的每个匹配记录重复。虽然我相信我发布的查询将以您正在寻找的形式获取数据,但我认为这不是查询数据库的最佳方法。我要么执行单独的查询,要么将单独的查询放入存储过程并返回多个结果集。

因为select子句中的子查询必须“插入”到外部查询结果集每一行的列值中。不能将一组值放入结果集的单个单元格(单行的单个列)中


您需要使用内部联接。联接表返回的多行将作为最终结果集中的多行输出

因为select子句中的子查询必须“插入”到外部查询结果集每行的列值中。不能将一组值放入结果集的单个单元格(单行的单个列)中


您需要使用内部联接。联接表返回的多行将作为最终结果集中的多行输出

我认为您要查找的查询可能是:

SELECT tab1.colID, tab1.colName, tab2.Column1, tab2.column2
FROM dbo.Table1 AS tab1
    INNER JOIN dbo.Table2 AS tab2
        ON tab1.colID = tab2.colID

子查询在WHERE子句中更为常用(至少我是这样认为的)。

我认为您要查找的查询可能是:

SELECT tab1.colID, tab1.colName, tab2.Column1, tab2.column2
FROM dbo.Table1 AS tab1
    INNER JOIN dbo.Table2 AS tab2
        ON tab1.colID = tab2.colID

子查询在WHERE子句中使用得更为典型(至少我是这样认为的)。

似乎您希望从表2中为表1中的每一行返回一个记录集(多列多行)。如果这是正确的,也许您可以从数据库返回XML格式的数据。像这样的

select Table1.colID, Table1.colName,Table2.*
from Table1 inner join Table2 ON Table1.colID = Table2.colID
然后,对于表1中的每一行,您将在XML中获得表2数据的多个子节点


从数据库返回XML以及在前端加载数据结构可能会影响性能。我不一定认为这是最好的方法,但它可能值得研究。

似乎您希望从表2中为表1中的每一行返回一个记录集(多列和多行)。如果这是正确的,也许您可以从数据库返回XML格式的数据。像这样的

select Table1.colID, Table1.colName,Table2.*
from Table1 inner join Table2 ON Table1.colID = Table2.colID
然后,对于表1中的每一行,您将在XML中获得表2数据的多个子节点


从数据库返回XML以及在前端加载数据结构可能会影响性能。我不一定认为这是最好的方法,但它可能值得研究。

如果您有一列类型为table的列,该怎么办?在sql server 2008中,您可以定义表的类型,据我所知,“表”数据类型可用于局部变量,或临时存储结果集以供以后处理。现在可以从外部客户端向T-SQL代码传递,但仍然不能将表中的列声明为“表”。有人知道吗?如果你有一个table类型的列呢?在sql server 2008中,您可以定义表的类型,据我所知,“表”数据类型可用于局部变量,或临时存储结果集以供以后处理。现在可以从外部客户端向T-SQL代码传递,但仍然不能将表中的列声明为“表”。有人知道吗?如果你真的只想要一行,你需要使用GROUP BY子句和合适的聚合函数,或者使用带有原始子查询的TOP 1(和合适的ORDER BY子句)。但听起来他并不是只想要一行。据我所知,他确实想要表2中的多行。我还假设表1包含colID的主键。如果您真的只需要一行,则需要使用GROUP BY子句和适当的聚合函数,或者使用带有原始子查询的TOP 1(和适当的ORDER BY子句)。但听起来他并不是只需要一行。据我所知,他确实想要表2中的多行。我还假设表1包含colID的主键,这很好,是“for xml”的想法,但没有尝试将sql编写为联接。也许这是一个使用Linq2SqlXML提供程序的想法。可能会有一点性能开销,但非常优雅,我认为这是值得的:)这很好,是“for xml”的想法,但没有尝试将sql编写为连接。也许这是一个使用Linq2SqlX的想法