SqlBulkCopyOptions Enum

Definisi

Bendera bitwise yang menentukan satu atau beberapa opsi untuk digunakan dengan instans SqlBulkCopy.

Enumerasi ini mendukung kombinasi bitwise dari nilai yang termasuk di dalamnya.

public enum class SqlBulkCopyOptions
[System.Flags]
public enum SqlBulkCopyOptions
[<System.Flags>]
type SqlBulkCopyOptions = 
Public Enum SqlBulkCopyOptions
Warisan
SqlBulkCopyOptions
Atribut

Bidang

Nama Nilai Deskripsi
Default 0

Gunakan nilai default untuk semua opsi.

KeepIdentity 1

Pertahankan nilai identitas sumber. Ketika tidak ditentukan, nilai identitas ditetapkan oleh tujuan.

CheckConstraints 2

Periksa batasan saat data sedang disisipkan. Secara default, batasan tidak diperiksa.

TableLock 4

Dapatkan kunci pembaruan massal selama durasi operasi penyalinan massal. Ketika tidak ditentukan, kunci baris digunakan.

KeepNulls 8

Pertahankan nilai null dalam tabel tujuan terlepas dari pengaturan untuk nilai default. Ketika tidak ditentukan, nilai null digantikan oleh nilai default jika berlaku.

FireTriggers 16

Ketika ditentukan, menyebabkan server mengaktifkan pemicu penyisipan untuk baris yang dimasukkan ke dalam database.

UseInternalTransaction 32

Ketika ditentukan, setiap batch operasi penyalinan massal akan terjadi dalam transaksi. Jika Anda menunjukkan opsi ini dan juga memberikan SqlTransaction objek kepada konstruktor, terjadi ArgumentException .

AllowEncryptedValueModifications 64

Ketika ditentukan, AllowEncryptedValueModifications memungkinkan penyalinan data terenkripsi secara massal antara tabel atau database, tanpa mendekripsi data. Biasanya, aplikasi akan memilih data dari kolom terenkripsi dari satu tabel tanpa mendekripsi data (aplikasi akan terhubung ke database dengan kata kunci pengaturan enkripsi kolom diatur ke dinonaktifkan) dan kemudian akan menggunakan opsi ini untuk menyisipkan data secara massal, yang masih dienkripsi.

Berhati-hatilah saat menentukan AllowEncryptedValueModifications karena ini dapat menyebabkan kerusakan database karena driver tidak memeriksa apakah data memang dienkripsi, atau apakah data dienkripsi dengan benar menggunakan jenis enkripsi, algoritma, dan kunci yang sama dengan kolom target.

CacheMetadata 128

Ketika ditentukan, CacheMetadata menyimpan metadata tabel tujuan setelah operasi penyalinan massal pertama, memungkinkan operasi berikutnya ke tabel yang sama untuk melewati kueri penemuan metadata. Ini dapat meningkatkan performa saat melakukan beberapa operasi penyalinan massal ke tabel tujuan yang sama.

Peringatan: Gunakan opsi ini hanya ketika Anda yakin skema tabel tujuan tidak akan berubah di antara operasi penyalinan massal. Jika skema tabel berubah (kolom ditambahkan, dihapus, atau dimodifikasi), menggunakan metadata yang di-cache dapat mengakibatkan kerusakan data, operasi yang gagal, atau perilaku yang tidak terduga. Panggil ClearCachedMetadata() untuk menghapus cache jika skema berubah.

Cache secara otomatis tidak valid ketika DestinationTableName diubah ke tabel yang berbeda. Mengubah ColumnMappings antar operasi tidak memerlukan pembatalan cache karena metadata yang di-cache hanya menjelaskan skema tabel tujuan, bukan pemetaan kolom sumber-ke-tujuan.

Cache tidak secara otomatis tidak valid ketika konteks koneksi berubah. Jika database perubahan yang mendasar SqlConnection (misalnya, melalui ChangeDatabase(String)) atau terhubung kembali ke server yang berbeda karena failover, pemanggil harus memanggil ClearCachedMetadata() untuk memastikan metadata di-refresh.

Contoh

Aplikasi konsol berikut menunjukkan cara melakukan beban massal yang menyalin nilai di kolom identitas tabel sumber ke kolom yang sesuai dalam tabel tujuan, alih-alih menghasilkan nilai baru untuk setiap kolom identitas baris.

Untuk melihat bagaimana opsi mengubah cara kerja beban massal, jalankan sampel dengan dbo. Tabel BulkCopyDemoMatchingColumns kosong. Semua baris dimuat dari sumber. Selanjutnya, jalankan sampel lagi tanpa mengosongkan tabel. Pengecualian dilemparkan, dan kode menulis pesan ke jendela konsol yang memberi tahu Anda bahwa baris tidak ditambahkan karena pelanggaran kunci utama.

Important

Sampel ini tidak akan berjalan kecuali Anda telah membuat tabel kerja seperti yang dijelaskan dalam Penyiapan Contoh Salinan Massal. Kode ini disediakan untuk mendemonstrasikan sintaks untuk menggunakan SqlBulkCopy saja. Jika tabel sumber dan tujuan berada dalam instans SQL Server yang sama, lebih mudah dan lebih cepat untuk menggunakan pernyataan Transact-SQL INSERT … SELECT untuk menyalin data.

namespace SqlBulkCopy_KeepIdentity;

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

            // 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;";
    }
}
// </Snippet1>

Keterangan

Anda dapat menggunakan SqlBulkCopyOptions enumerasi saat membuat SqlBulkCopy instans untuk mengubah bagaimana metode untuk instans tersebut WriteToServer(DbDataReader) berperilaku.

Berlaku untuk