sql >> Databáze >  >> RDS >> Sqlserver

Vložit do dočasné tabulky z uložené procedury, která vrací více sad výsledků

Starý příspěvek, ale čelil jsem stejnému problému a ačkoli výše uvedené odpovědi trochu souvisí, otázka OP se týká SP, který vrací více sad. Jediné řešení, které jsem našel, kromě přepsání SP a jeho rozdělení na menší SP, bylo napsat SQL CLR procedura, která provede SP a vrátí pouze požadovanou sadu výsledků. Procedura získá index požadované sady výsledků a provede SqlCommand ke spuštění počátečního T-SQL SP, poté prochází SqlDataReader výsledky, dokud nenajde požadovanou sadu výsledků a nevrátí odpovídající záznamy. Následující kód je součástí SQL CLR postup:

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. PL/SQL extrahuje názvy sloupců příkazu SELECT z vlastního dotazu

  2. Parametrizovaný dotaz v potížích s Oracle

  3. Funkce Oracle To_Char V ve formátovacím řetězci

  4. Odstranění duplicitních dat z tabulky pomocí MySQL