sql >> Database teknologi >  >> RDS >> Sqlserver

Indsæt i midlertidig tabel fra en lagret procedure, der returnerer flere resultatsæt

Gammelt indlæg, men jeg stod over for det samme problem, og selvom svarene nævnt ovenfor er lidt relaterede, handler OP's spørgsmål om SP, der returnerer flere sæt. Den eneste løsning, jeg kunne finde, udover at omskrive SP'en for at opdele den i mindre SP'er, var at skrive en SQL CLR procedure, der udfører SP og kun returnerer det påkrævede resultatsæt. Proceduren henter indekset for det påkrævede resultatsæt, udfører en SqlCommand for at køre den oprindelige T-SQL SP, går derefter gennem en SqlDataReader resultater, indtil den finder det ønskede resultatsæt og returnerer de tilsvarende poster. Følgende kode er en del af 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. Ikke en gyldig måned, når der udføres en IN-parameterprocedure med datoværdi

  2. Coldfusion:Håndtering af null-værdier i datofelt

  3. Fuld præcisionsoutput af flydende kommatyper i SQL Server Management Studio

  4. SQL Replace or Insert Into Syntax fejl