私は同じ問題に直面しましたが、上記の回答は少し関連していますが、OPの質問は複数のセットを返すSPに関するものです。私が見つけることができた唯一の解決策は、SPを小さなSPに分割することを除いて、SQL CLR
プロシージャを記述してSPを実行し、必要な結果セットのみを返すことでした。このプロシージャは、必要な結果セットのインデックスを取得し、T-SQL
SPを実行するためにSqlCommand
を実行し、SqlDataReader
の結果をループして、目的の結果セットを見つけ出し、対応するレコードを返します。次のコードSQL CLR
手順の一部です:
SqlDataReader rdr = command.ExecuteReader();
int index = 0;
bool bContinue = true;
while (index < resultSetIndex.Value)
{
if (!rdr.NextResult())
{
bContinue = false;
break;
}
index++;
}
if (!bContinue)
throw new Exception("Unable to read result sets.");
.......
List<SqlMetaData> metadataList = new List<SqlMetaData>();
for (int i = 0; i < rdr.FieldCount; i++)
{
string dbTypeName = rdr.GetDataTypeName(i);
SqlMetaData metadata;
if (dbTypeName.ToLower().Contains("char"))
metadata = new SqlMetaData(rdr.GetName(i), (SqlDbType)Enum.Parse(typeof(SqlDbType), dbTypeName, true), 50);
else
metadata = new SqlMetaData(rdr.GetName(i), (SqlDbType)Enum.Parse(typeof(SqlDbType), dbTypeName, true));
metadataList.Add(metadata);
}
SqlDataRecord record = new SqlDataRecord(metadataList.ToArray());
object[] values = new object[rdr.FieldCount];
if (rdr.HasRows)
{
SqlContext.Pipe.SendResultsStart(record);
while (rdr.Read())
{
rdr.GetValues(values);
record.SetValues(values);
SqlContext.Pipe.SendResultsRow(record);
}
SqlContext.Pipe.SendResultsEnd();
}
http://stackoverflow.com/questions/209383/select-column-from-result-set-of-stored-procedure – THEn
[SELECT * INTO \ [temp table \] FROM \ [Stored Procedure \]の方法]の複製が可能です(http://stackoverflow.com/questions/653714/how-to-select-into-temp-table-from -stored-procedure) –