Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.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
C# 为存储过程中的一个变量输出获取多个值_C#_Sql_Stored Procedures - Fatal编程技术网

C# 为存储过程中的一个变量输出获取多个值

C# 为存储过程中的一个变量输出获取多个值,c#,sql,stored-procedures,C#,Sql,Stored Procedures,这些是我的课 Public Class Student { Public int Id{get;set;} public string Name {get;set;} } Public Class Department { Public int Id{get;set;} public string Name {get;set;} public IList <Student> StudentList{get;set;} } 我需要使用存储过程将系里的所有数据与相应

这些是我的课

Public Class Student
{
  Public int Id{get;set;}
  public string Name {get;set;}
}
Public Class Department
{
  Public int Id{get;set;}
  public string Name {get;set;}
  public IList <Student> StudentList{get;set;}
}
我需要使用存储过程将系里的所有数据与相应的学生名单联系起来

CREATE PROCEDURE test
(
)
AS
BEGIN
select Id as Id,
       Name as Name,
       ----here I need all the corresponding data from student table as StudentList 
       from Department
有可能吗。。如果是,请帮助我。 显然,我想要的是我想写另一个过程,并调用它作为StudentList,是否可以使用join,我选择在这里,以便万一系里没有相应的学生,它仍然会被检索

SELECT d.ID
       ,d.Name
       ,s.ID
       ,s. Name 
FROM Deparment d
LEFT JOIN Student s ON s.Department = d.ID
因此,从您的示例中,查询将返回以下结果:

ID, Name, Student ID Student Name
1   xxx   1          aa
1   xxx   2          bb
2   yyy   3          cc

假设您的存储过程将接受部门id作为参数并检索该部门下的所有学生,只需在查询中添加一个条件

WHERE d.ID = @DeptID
正如@Eugen所说,只需在应用程序中处理结果

使用join,我在这里选择,这样,如果系里没有相应的学生,它仍然会被检索

SELECT d.ID
       ,d.Name
       ,s.ID
       ,s. Name 
FROM Deparment d
LEFT JOIN Student s ON s.Department = d.ID
因此,从您的示例中,查询将返回以下结果:

ID, Name, Student ID Student Name
1   xxx   1          aa
1   xxx   2          bb
2   yyy   3          cc

假设您的存储过程将接受部门id作为参数并检索该部门下的所有学生,只需在查询中添加一个条件

WHERE d.ID = @DeptID

正如@Eugen所说,只需在应用程序中处理结果

你所描述的是可以做到的,但这不是正常的过程。您可以使用
for xml
返回一列,在该列中对所有学生信息进行编码。请注意,虽然这会导致在一行中返回所有需要的数据,但您必须手动创建并填充所有对象。ORM类似的实体框架或nHibernate都不会同时填充您的系和学生。事实上,为了创建学生,您可能会手工解析字符串

今天最常见的做法是使用实体框架,让它为您完成所有工作

这里有一些代码来说明如何按照您的要求进行操作。再次请注意,不建议这样做,这只是一种方法:

create table #s (id int, name varchar(max), departmentId int);

insert into #s (id, name, departmentId)
select * from (values  (1  , 'aa', 1) ,(2  , 'bb', 1) ,(3  , 'cc', 2)
) g(id, name, departmentId);

create table #d (departmentId int, name varchar(max));
insert into #d (departmentId, name) select * from (values 
(1  , 'xxx') ,(2  , 'yyy')
)g(departmentId, name)


 select *, (select id, name, departmentId 
            from #s s where s.departmentID = d.departmentId for xml path
           )students
  from #d d 

  drop table #d 
  drop table #s;
1系学生=

<row><id>1</id><name>aa</name><departmentId>1</departmentId></row>
<row><id>2</id><name>bb</name><departmentId>1</departmentId></row>
1aa1
2bb1

特别是,您可能会发现这有点沉重,2016应该能够使用JSON做类似的事情,但如果您同时希望这样做,您必须自己定制输出。这是可以做到的,也不会太难。

你所描述的可以做到,但这不是正常的过程。您可以使用
for xml
返回一列,在该列中对所有学生信息进行编码。请注意,虽然这会导致在一行中返回所有需要的数据,但您必须手动创建并填充所有对象。ORM类似的实体框架或nHibernate都不会同时填充您的系和学生。事实上,为了创建学生,您可能会手工解析字符串

今天最常见的做法是使用实体框架,让它为您完成所有工作

这里有一些代码来说明如何按照您的要求进行操作。再次请注意,不建议这样做,这只是一种方法:

create table #s (id int, name varchar(max), departmentId int);

insert into #s (id, name, departmentId)
select * from (values  (1  , 'aa', 1) ,(2  , 'bb', 1) ,(3  , 'cc', 2)
) g(id, name, departmentId);

create table #d (departmentId int, name varchar(max));
insert into #d (departmentId, name) select * from (values 
(1  , 'xxx') ,(2  , 'yyy')
)g(departmentId, name)


 select *, (select id, name, departmentId 
            from #s s where s.departmentID = d.departmentId for xml path
           )students
  from #d d 

  drop table #d 
  drop table #s;
1系学生=

<row><id>1</id><name>aa</name><departmentId>1</departmentId></row>
<row><id>2</id><name>bb</name><departmentId>1</departmentId></row>
1aa1
2bb1

特别是,您可能会发现这有点沉重,2016应该能够使用JSON做类似的事情,但如果您同时希望这样做,您必须自己定制输出。这是可以做到的,也不会太难。

存储过程无法返回包含子对象列表的对象。在这里,您可以实现的最好方法是返回由DepartmentID连接的Student和Department的所有行,然后在客户端处理这些行并填写StudentList.Tag dbms产品。许多产品的sp远远不符合ANSI SQL。您可以编写两个查询来选择学生和部门作为单独的表。其余的我想可以用c#完成。是的,这是可能的,但我只想知道天气是我的问题。如果可能的话,存储过程不能返回包含子对象列表的对象。在这里,您可以实现的最好方法是返回由DepartmentID连接的Student和Department的所有行,然后在客户端处理这些行并填写StudentList.Tag dbms产品。许多产品的sp远远不符合ANSI SQL。您可以编写两个查询来选择学生和部门作为单独的表。其余的我想可以用c#完成。是的,这是可能的,但我只想知道天气是我的问题。如果可能的话,如果我使用join,我将以重复数据结束。我只是不想要它,我也编辑了我的问题。如果我使用join,我将以重复数据结束。我只是不想要它,我也编辑了我的问题