Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Masukkan Ke tabel temp dari prosedur tersimpan yang mengembalikan beberapa set hasil

Posting lama, tetapi saya menghadapi masalah yang sama dan meskipun jawaban yang disebutkan di atas sedikit terkait, pertanyaan OP adalah tentang SP yang mengembalikan beberapa set. Satu-satunya solusi yang dapat saya temukan, selain menulis ulang SP untuk membaginya menjadi SP yang lebih kecil, adalah dengan menulis SQL CLR prosedur yang mengeksekusi SP dan hanya mengembalikan set hasil yang diperlukan. Prosedur mendapatkan indeks dari kumpulan hasil yang diperlukan, menjalankan SqlCommand untuk menjalankan T-SQL . awal SP, lalu mengulang melalui SqlDataReader hasil sampai menemukan set hasil yang diinginkan dan mengembalikan catatan yang sesuai. Kode berikut adalah bagian dari SQL CLR prosedur:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara menangkap data yang dikirimkan dalam SqlBulkCopy menggunakan Sql Profiler?

  2. Lewati beberapa kolom di SqlBulkCopy

  3. Bagaimana cara mengatur loop while tak terbatas di SQL Server?

  4. Bangun dan Deploy paket SSIS menggunakan VSTS

  5. SQL Server 2008 - Pivot pada satu kolom, kelompokkan dengan yang lain, pertahankan referensi ke ketiga