पुरानी पोस्ट, लेकिन मुझे उसी समस्या का सामना करना पड़ा और यद्यपि ऊपर वर्णित उत्तर थोड़ा संबंधित हैं, ओपी का प्रश्न एसपी के बारे में है जो कई सेट देता है। एसपी को छोटे एसपी में विभाजित करने के लिए फिर से लिखने के अलावा, मुझे केवल एक ही समाधान मिल सकता था, एक SQL CLR
लिखना था। प्रक्रिया जो एसपी को निष्पादित करती है और केवल आवश्यक परिणाम सेट लौटाती है। प्रक्रिया आवश्यक परिणाम सेट की अनुक्रमणिका प्राप्त करती है, एक SqlCommand
निष्पादित करती है प्रारंभिक T-SQL
चलाने के लिए SP, फिर एक 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();
}