SqlBulkCopyOptions SqlBulkCopyOptions SqlBulkCopyOptions SqlBulkCopyOptions Enum

Определение

Побитовый флаг, который определяет один или несколько параметров для использования с экземпляром SqlBulkCopy.Bitwise flag that specifies one or more options to use with an instance of SqlBulkCopy.

Это перечисление имеет атрибут FlagsAttribute, который разрешает побитовое сочетание значений его элементов.

public enum class SqlBulkCopyOptions
[System.Flags]
public enum SqlBulkCopyOptions
type SqlBulkCopyOptions = 
Public Enum SqlBulkCopyOptions
Наследование
SqlBulkCopyOptionsSqlBulkCopyOptionsSqlBulkCopyOptionsSqlBulkCopyOptions
Атрибуты

Поля

AllowEncryptedValueModifications AllowEncryptedValueModifications AllowEncryptedValueModifications AllowEncryptedValueModifications 64

Если параметр AllowEncryptedValueModifications задан, можно осуществлять массовое копирование зашифрованных данных между таблицами или базами данных без расшифровки данных.When specified, AllowEncryptedValueModifications enables bulk copying of encrypted data between tables or databases, without decrypting the data. Как правило, приложению нужно выбирать данные из зашифрованных столбцов одной таблицы без расшифровки данных (приложение должно подключиться к базе данных с ключевым словом, задающим отключение параметра шифрования столбца), а затем использовать эту возможность для массовой вставки данных, которые остаются зашифрованными.Typically, an application would select data from encrypted columns from one table without decrypting the data (the app would connect to the database with the column encryption setting keyword set to disabled) and then would use this option to bulk insert the data, which is still encrypted. Дополнительные сведения см. в разделе Всегда зашифровано.For more information, see Always Encrypted.

Будьте внимательны при указании параметра AllowEncryptedValueModifications: это может привести к повреждению базы данных, так как драйвер не проверяет, действительно ли данные зашифрованы и зашифрованы ли они правильно, с использованием того же типа шифрования, алгоритма и ключа, что и в целевом столбце.Use caution when specifying AllowEncryptedValueModifications as this may lead to corrupting the database because the driver does not check if the data is indeed encrypted, or if it is correctly encrypted using the same encryption type, algorithm and key as the target column.

CheckConstraints CheckConstraints CheckConstraints CheckConstraints 2

Проверьте ограничения при вставке данных.Check constraints while data is being inserted. По умолчанию ограничения не проверяются.By default, constraints are not checked.

Default Default Default Default 0

Для всех параметров используйте значения по умолчанию.Use the default values for all options.

FireTriggers FireTriggers FireTriggers FireTriggers 16

Если указано, заставьте сервер запускать триггеры вставки для строк, вставляемых в базу данных сервера.When specified, cause the server to fire the insert triggers for the rows being inserted into the database.

KeepIdentity KeepIdentity KeepIdentity KeepIdentity 1

Сохраните исходные значения идентификаторов.Preserve source identity values. Если не указаны, значения идентификаторов назначаются целевым объектом.When not specified, identity values are assigned by the destination.

KeepNulls KeepNulls KeepNulls KeepNulls 8

Сохраните значения NULL в целевой таблице независимо от параметров значений по умолчанию.Preserve null values in the destination table regardless of the settings for default values. Если не указано, значения NULL заменяются значениями по умолчанию там, где это применимо.When not specified, null values are replaced by default values where applicable.

TableLock TableLock TableLock TableLock 4

Получите блокировку массовых обновлений в течение выполнения операции массового копирования.Obtain a bulk update lock for the duration of the bulk copy operation. Если не указано, используются блокировки строк.When not specified, row locks are used.

UseInternalTransaction UseInternalTransaction UseInternalTransaction UseInternalTransaction 32

Если указано, каждый пакет операции массового копирования будет выполняться в рамках транзакции.When specified, each batch of the bulk-copy operation will occur within a transaction. Если указать этот параметр, а также предоставить объект SqlTransaction в конструктор, возникнет ArgumentException.If you indicate this option and also provide a SqlTransaction object to the constructor, an ArgumentException occurs.

Примеры

В следующем консольном приложении показано, как выполнить полную загрузку, которая копирует значение из столбца Identity исходной таблицы в соответствующий столбец целевой таблицы вместо создания нового значения для столбца идентификаторов каждой строки.The following console application demonstrates how to perform a bulk load that copies the value in the identity column of the source table to the corresponding column in the destination table, instead of generating a new value for each row's identity column.

Чтобы увидеть, как этот параметр изменяет способ работы с массовыми нагрузками, запустите пример с помощью dbo. Таблица Булккопидемоматчингколумнс пуста.To see how the option changes the way the bulk load works, run the sample with the dbo.BulkCopyDemoMatchingColumns table empty. Все строки загружаются из источника.All rows load from the source. Затем снова запустите пример без очистки таблицы.Next, run the sample again without emptying the table. Создается исключение, и код записывает сообщение в окно консоли, уведомляющее о том, что строки не были добавлены из-за нарушений первичного ключа.An exception is thrown, and the code writes a message to the console window notifying you that rows were not added because of primary key violations.

Важно!

Этот пример не будет выполняться, если вы не создали рабочие таблицы, как описано в статье Пример установки с помощью инструкций копирования.This sample will not run unless you have created the work tables as described in Bulk Copy Example Setup. Этот код предназначен для демонстрации синтаксиса только для использования SqlBulkCopy .This code is provided to demonstrate the syntax for using SqlBulkCopy only. Если исходная и целевая таблицы находятся в одном и том же экземпляре SQL Server, то проще и быстрее использовать инструкцию INSERT … SELECT Transact-SQL для копирования данных.If the source and destination tables are in the same SQL Server instance, it is easier and faster to use a Transact-SQL INSERT … SELECT statement to copy the data.

using System.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();

            // Create the SqlBulkCopy object using a connection string 
            // and the KeepIdentity option. 
            // In the real world you would not use SqlBulkCopy to move
            // data from one table to the other in the same database.
            using (SqlBulkCopy bulkCopy =
                new SqlBulkCopy(connectionString, SqlBulkCopyOptions.KeepIdentity))
            {
                bulkCopy.DestinationTableName =
                    "dbo.BulkCopyDemoMatchingColumns";

                try
                {
                    // Write from the source to the destination.
                    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;";
    }
}
Imports System.Data.SqlClient

Module Module1
    Sub Main()
        Dim connectionString As String = GetConnectionString()

        ' Open a connection to the AdventureWorks database.
        Using sourceConnection As SqlConnection = _
           New SqlConnection(connectionString)
            sourceConnection.Open()

            ' Perform an initial count on the destination table.
            Dim commandRowCount As New SqlCommand( _
            "SELECT COUNT(*) FROM dbo.BulkCopyDemoMatchingColumns;", _
                sourceConnection)
            Dim countStart As Long = _
               System.Convert.ToInt32(commandRowCount.ExecuteScalar())
            Console.WriteLine("Starting row count = {0}", countStart)

            ' Get data from the source table as a SqlDataReader.
            Dim commandSourceData As SqlCommand = New SqlCommand( _
               "SELECT ProductID, Name, ProductNumber " & _
               "FROM Production.Product;", sourceConnection)
            Dim reader As SqlDataReader = commandSourceData.ExecuteReader

            ' Create the SqlBulkCopy object using a connection string 
            ' and the KeepIdentity option. 
            ' In the real world you would not use SqlBulkCopy to move
            ' data from one table to the other in the same database.
            Using bulkCopy As SqlBulkCopy = _
              New SqlBulkCopy(connectionString, SqlBulkCopyOptions.KeepIdentity)
                bulkCopy.DestinationTableName = "dbo.BulkCopyDemoMatchingColumns"

                Try
                    ' Write from the source to the destination.
                    bulkCopy.WriteToServer(reader)

                Catch ex As Exception
                    Console.WriteLine(ex.Message)

                    Finally
                        ' Close the SqlDataReader. The SqlBulkCopy
                        ' object is automatically closed at the end
                        ' of the Using block.
                        reader.Close()
                End Try
            End Using

            ' Perform a final count on the destination table
            ' to see how many rows were added.
            Dim countEnd As Long = _
                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()
        End Using
    End Sub

    Private Function GetConnectionString() As String
        ' 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;"
    End Function
End Module

Комментарии

SqlBulkCopyOptions Перечисление можно использовать при SqlBulkCopy создании WriteToServer экземпляра, чтобы изменить способ поведения методов для этого экземпляра.You can use the SqlBulkCopyOptions enumeration when you construct a SqlBulkCopy instance to change how the WriteToServer methods for that instance behave.

Применяется к

Дополнительно