Udostępnij za pośrednictwem


SqlBulkCopyColumnOrderHint Klasa

Definicja

Definiuje kolejność sortowania kolumny w SqlBulkCopy tabeli docelowej wystąpienia zgodnie z indeksem klastrowanym w tabeli.

public ref class SqlBulkCopyColumnOrderHint sealed
public sealed class SqlBulkCopyColumnOrderHint
type SqlBulkCopyColumnOrderHint = class
Public NotInheritable Class SqlBulkCopyColumnOrderHint
Dziedziczenie
SqlBulkCopyColumnOrderHint

Przykłady

Poniższy przykład zbiorczo kopiuje dane z tabeli źródłowej w przykładowej bazie danych AdventureWorks do tabeli docelowej w tej samej bazie danych. Obiekt SqlBulkCopyColumnOrderHint służy do definiowania kolejności sortowania kolumny docelowej ProductNumber.

Ważne

Ten przykład nie zostanie uruchomiony, chyba że utworzono tabele robocze zgodnie z opisem w temacie Konfiguracja przykładu kopiowania zbiorczego. Ten kod jest dostarczany w celu zademonstrowania składni tylko przy użyciu narzędzia SqlBulkCopy . Jeśli tabele źródłowe i docelowe znajdują się w tym samym wystąpieniu SQL Server, łatwiej i szybciej jest użyć instrukcji Języka Transact-SQL INSERT … SELECT do skopiowania danych.

using System;
using System.Data;
using Microsoft.Data.SqlClient;

class Program
{
    static void Main()
    {
        string connectionString = GetConnectionString();
        // Open a sourceConnection to the AdventureWorks database.
        using (SqlConnection sourceConnection =
                   new SqlConnection(connectionString))
        {
            sourceConnection.Open();

            // Perform an initial count on the destination table.
            SqlCommand commandRowCount = new SqlCommand(
                "SELECT COUNT(*) FROM " +
                "dbo.BulkCopyDemoMatchingColumns;",
                sourceConnection);
            long countStart = System.Convert.ToInt32(
                commandRowCount.ExecuteScalar());
            Console.WriteLine("Starting row count = {0}", countStart);

            // Get data from the source table as a SqlDataReader.
            SqlCommand commandSourceData = new SqlCommand(
                "SELECT ProductID, Name, " +
                "ProductNumber " +
                "FROM Production.Product;", sourceConnection);
            SqlDataReader reader =
                commandSourceData.ExecuteReader();

            // Set up the bulk copy object.
            using (SqlBulkCopy bulkCopy =
                       new SqlBulkCopy(connectionString))
            {
                bulkCopy.DestinationTableName =
                    "dbo.BulkCopyDemoMatchingColumns";

                // Setup an order hint for the ProductNumber column.
                SqlBulkCopyColumnOrderHint hintNumber =
                    new SqlBulkCopyColumnOrderHint("ProductNumber", SortOrder.Ascending);
                bulkCopy.ColumnOrderHints.Add(hintNumber);

                // Write from the source to the destination.
                try
                {
                    bulkCopy.WriteToServer(reader);
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
                finally
                {
                    // Close the SqlDataReader. The SqlBulkCopy
                    // object is automatically closed at the end
                    // of the using block.
                    reader.Close();
                }
            }

            // Perform a final count on the destination 
            // table to see how many rows were added.
            long countEnd = System.Convert.ToInt32(
                commandRowCount.ExecuteScalar());
            Console.WriteLine("Ending row count = {0}", countEnd);
            Console.WriteLine("{0} rows were added.", countEnd - countStart);
            Console.WriteLine("Press Enter to finish.");
            Console.ReadLine();
        }
    }

    private static string GetConnectionString()
    // To avoid storing the sourceConnection string in your code, 
    // you can retrieve it from a configuration file. 
    {
        return "Data Source=(local); " +
            " Integrated Security=true;" +
            "Initial Catalog=AdventureWorks;";
    }
}

Uwagi

Wskazówki dotyczące kolejności kolumn definiują kolejność sortowania kolumny w tabeli docelowej.

Wydajność narzędzia SqlBulkCopy jest zwiększana, jeśli importowane dane są sortowane zgodnie z indeksem klastrowanym w tabeli, jeśli istnieją. Jeśli dane są sortowane w kolejności, która różni się od kolejności klastrowanego klucza indeksu lub jeśli w tabeli nie ma indeksu klastrowanego, wskazówka dotycząca kolejności jest ignorowana.

Wskazówki dotyczące kolejności można określić dla dowolnej liczby kolumn w tabeli docelowej. Domyślnie operacja wstawiania zbiorczego zakłada, że dane są nieuporządkowane, jeśli nie podano żadnych wskazówek.

Podane nazwy kolumn muszą być prawidłowymi nazwami kolumn w tabeli docelowej. Kolejność, w której można określić wskazówki, jest dowolna. Nie można określić nazwy jednej kolumny więcej niż raz.

ColumnMappings Jeśli kolekcja nie jest pusta, wskazówki dotyczące kolejności można podać tylko dla prawidłowych kolumn docelowych, które zostały zamapowane.

Jeśli zostanie podana wartość SortOrder nieokreślona, zostanie zgłoszony element ArgumentException .

Konstruktory

SqlBulkCopyColumnOrderHint(String, SortOrder)

Tworzy nową wskazówkę kolejności kolumn dla określonej kolumny docelowej.

Właściwości

Column

Nazwa kolumny docelowej w tabeli docelowej, dla której podano wskazówkę.

SortOrder

Kolejność sortowania kolumny docelowej w tabeli docelowej.

Dotyczy