SqlBulkCopyColumnOrderHint Classe
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Definisce l'ordine di ordinamento per una colonna nella tabella di destinazione di un'istanza SqlBulkCopy , in base all'indice cluster nella tabella.
public ref class SqlBulkCopyColumnOrderHint sealed
public sealed class SqlBulkCopyColumnOrderHint
type SqlBulkCopyColumnOrderHint = class
Public NotInheritable Class SqlBulkCopyColumnOrderHint
- Ereditarietà
-
SqlBulkCopyColumnOrderHint
Esempio
L'esempio seguente esegue la copia bulk di dati da una tabella di origine nel database di esempio AdventureWorks a una tabella di destinazione nello stesso database. Un oggetto SqlBulkCopyColumnOrderHint viene usato per definire l'ordine di ordinamento per la colonna di destinazione ProductNumber.
Importante
Questo esempio non verrà eseguito a meno che non siano state create le tabelle di lavoro, come descritto in Installazione di esempio di copia bulk.
Il codice viene fornito solo per illustrare la sintassi relativa all'uso di SqlBulkCopy. Se le tabelle di origine e di destinazione si trovano nella stessa istanza di SQL Server, è più semplice e veloce usare un'istruzione Transact-SQL INSERT … SELECT
per copiare i dati.
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;";
}
}
Commenti
Gli hint per l'ordine di colonna definiscono l'ordine di ordinamento della colonna nella tabella di destinazione.
Le prestazioni di SqlBulkCopy sono migliorate se i dati importati vengono ordinati in base all'indice cluster nella tabella, se presente. Se i dati vengono ordinati in un ordine diverso dall'ordine di una chiave di indice cluster o se nella tabella non è presente alcun indice cluster, l'hint dell'ordine viene ignorato.
Gli hint per l'ordine possono essere specificati per qualsiasi numero di colonne nella tabella di destinazione. Per impostazione predefinita, l'operazione di inserimento bulk presuppone che i dati siano non ordinati se non vengono forniti hint.
I nomi di colonna specificati devono corrispondere a nomi di colonna validi nella tabella di destinazione. L'ordine in cui è possibile specificare hint è arbitrario. Non è possibile specificare più di una volta un singolo nome di colonna.
Se la raccolta non è vuota, è possibile specificare solo gli hint dell'ordine ColumnMappings per le colonne di destinazione valide mappate.
Se viene specificato un SortOrder oggetto Non specificato, verrà generato un ArgumentException oggetto.
Costruttori
SqlBulkCopyColumnOrderHint(String, SortOrder) |
Crea un nuovo hint per l'ordine di colonna per la colonna di destinazione specificata. |
Proprietà
Column |
Nome della colonna di destinazione nella tabella di destinazione per cui viene fornito l'hint. |
SortOrder |
Ordinamento della colonna di destinazione nella tabella di destinazione. |