sql >> Database >  >> RDS >> Sqlserver

Invoegen in tijdelijke tabel vanuit een opgeslagen procedure die meerdere resultaatsets retourneert

Oud bericht, maar ik had hetzelfde probleem en hoewel de hierboven genoemde antwoorden een beetje gerelateerd zijn, gaat de vraag van de OP over SP die meerdere sets retourneert. De enige oplossing die ik kon vinden, afgezien van het herschrijven van de SP om deze op te splitsen in kleinere SP's, was het schrijven van een SQL CLR procedure die de SP uitvoert en alleen de vereiste resultatenset retourneert. De procedure haalt de index op van de vereiste resultatenset, voert een SqlCommand uit om de initiële T-SQL . uit te voeren SP, doorloopt dan een SqlDataReader resultaten totdat het de gewenste resultaatset vindt en de bijbehorende records retourneert. De volgende code maakt deel uit van de SQL CLR procedure:

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();
}


  1. Hoe verbreek ik bij het terugzetten van een back-up alle actieve verbindingen?

  2. Moet ik Query Cache in MySQL uitschakelen?

  3. Meerdere foutmeldingen vastleggen vanuit een enkele instructie in TRY CATCH

  4. Audio opslaan in SQL Server?