gpt4 book ai didi

sql-server - 从具有多个结果集的存储过程中检索数据

转载 作者:行者123 更新时间:2023-12-01 23:46:43 27 4
gpt4 key购买 nike

给定 SQL Server 中具有多个 select 语句的存储过程,是否有办法在调用该过程时单独处理这些结果?

例如:

alter procedure dbo.GetSomething
as
begin
select * from dbo.Person;
select * from dbo.Car;
end;

在 .NET 中,如果我调用此过程,我可以使用 SqlDataReader 在两个结果集之间移动,这样我就可以轻松检索所有人和汽车。然而,在 SQL 中,当我直接执行过程时,我会得到两个结果集。

如果我打电话:

insert @myTempTable
exec dbo.GetSomething;

然后它会出错,因为列定义不匹配。如果碰巧 Person 和 Car 有相同的列,它会将两者连接在一起,@myTempTable 会从两个表中获取所有记录,这显然也不好。

我可以定义代表两个结果集的新自定义类型,并制作这些输出参数,而不是使用多个 select 语句,但我想知道是否有更好的方法 - 某种拉取的方法两个结果都放入临时表中,或者循环结果,或者其他什么。

编辑

实际上,仔细观察后,即使是输出表参数也无法解决这个问题 - 它们是只读的,在 SQL 2012 中仍然如此。( Connect ticket asking for this to be added )

最佳答案

retrieve multiple result sets using a DataReader with NextResult你可以这样做

String myConStr  
="User ID="user";password="pass";Initial Catalog=pubs;Data Source=Server";
SqlConnection myConnection = new SqlConnection(myConStr);
SqlCommand myCommand = new SqlCommand();
SqlDataReader myReader;

myCommand.CommandType = CommandType.StoredProcedure;
myCommand.Connection = myConnection;
myCommand.CommandText = "MyProc";

try
{
myConnection.Open();
myReader = myCommand.ExecuteReader();

while (myReader.Read())
{
// write logic to process data for the first result.
}

myReader.NextResult();
while (myReader.Read())
{
// write logic to process data for the second result.
}
}

关于sql-server - 从具有多个结果集的存储过程中检索数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20082889/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com