SqlBulkCopyColumnOrderHint Clase
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Define el criterio de ordenación de una columna en la tabla de destino de una SqlBulkCopy instancia, según el índice agrupado de la tabla.
public ref class SqlBulkCopyColumnOrderHint sealed
public sealed class SqlBulkCopyColumnOrderHint
type SqlBulkCopyColumnOrderHint = class
Public NotInheritable Class SqlBulkCopyColumnOrderHint
- Herencia
-
SqlBulkCopyColumnOrderHint
Ejemplos
En el ejemplo siguiente se copian de forma masiva datos de una tabla de origen en la base de datos de ejemplo AdventureWorks a una tabla de destino en la misma base de datos. Se usa un objeto SqlBulkCopyColumnOrderHint para definir el criterio de ordenación de la columna de destino ProductNumber.
Importante
Este ejemplo no se ejecuta a menos que haya creado las tablas de trabajo como se describe en Configuración de ejemplos de copia masiva.
Este código se proporciona para mostrar la sintaxis para usar SqlBulkCopy. Si las tablas de origen y destino están en la misma instancia de SQL Server, es más fácil y rápido usar una instrucción Transact-SQL INSERT … SELECT
para copiar los datos.
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;";
}
}
Comentarios
Las sugerencias de orden de columna definen el criterio de ordenación de la columna en la tabla de destino.
El rendimiento de SqlBulkCopy se mejora si los datos que se importan se ordenan según el índice agrupado de la tabla, si existe. Si los datos se ordenan en un orden que difiere del orden de una clave de índice agrupada o si no hay ningún índice agrupado en la tabla, se omite la sugerencia de orden.
Las sugerencias de orden se pueden especificar para cualquier número de columnas de la tabla de destino. De forma predeterminada, la operación de inserción masiva supone que los datos no están ordenados si no se proporcionan sugerencias.
Los nombres de columna facilitados deben ser nombres válidos en la tabla de destino. El orden en que se pueden especificar sugerencias es arbitrario. No se puede especificar un nombre de columna única más de una vez.
Si la ColumnMappings colección no está vacía, las sugerencias de orden solo se pueden proporcionar para las columnas de destino válidas que se han asignado.
Si se proporciona un SortOrder de sin especificar, se producirá una ArgumentException excepción .
Constructores
SqlBulkCopyColumnOrderHint(String, SortOrder) |
Crea una nueva sugerencia de orden de columna para la columna de destino especificada. |
Propiedades
Column |
Nombre de la columna de destino de la tabla de destino para la que se proporciona la sugerencia. |
SortOrder |
Criterio de ordenación de la columna de destino en la tabla de destino. |