Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Chèn vào bảng tạm thời từ một thủ tục được lưu trữ trả về nhiều bộ kết quả

Bài cũ, nhưng tôi gặp phải vấn đề tương tự và mặc dù các câu trả lời được đề cập ở trên có một chút liên quan, câu hỏi của OP là về SP trả về nhiều bộ. Giải pháp duy nhất tôi có thể tìm thấy, ngoài việc viết lại SP để chia nó thành các SP nhỏ hơn, là viết một SQL CLR thủ tục thực thi SP và chỉ trả về tập kết quả được yêu cầu. Thủ tục nhận chỉ mục của tập kết quả được yêu cầu, thực thi SqlCommand để chạy T-SQL intial SP, sau đó lặp qua SqlDataReader kết quả cho đến khi nó tìm thấy tập kết quả mong muốn và trả về các bản ghi tương ứng. Đoạn mã sau là một phần của SQL CLR thủ tục:

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. Lọc các THAM GIA:Ở ĐÂU so với BẬT

  2. Truy cập vào tập hợp kết quả từ bên trong các thủ tục đã lưu trữ Transact-SQL SQL Server

  3. Hiểu tầm quan trọng của cài đặt bộ nhớ trong SQL Server

  4. 7 sự thật về từ đồng nghĩa SQL Server bạn nên biết

  5. Làm cách nào để tôi chèn một Byte [] vào một cột VARBINARY của Máy chủ SQL