Usando SqlBulkCopy, ¿cómo inserto datos en una tabla en un esquema de base de datos no predeterminado?

.net database-schema schema sqlbulkcopy

Pregunta

Necesito insertar datos en una tabla en un esquema llamado Staging usando SqlBulkCopy .

Parece que la API solo le permite establecer el nombre de la tabla de destino utilizando la propiedad DestinationTableName .

¿Cómo logro esto? ¿Es posible?

Respuesta aceptada

Si bien la API no proporciona una interfaz explícita para establecer el esquema de destino, en realidad puede rellenar un nombre de tabla calificado de 2 o 3 partes en la propiedad DestinationTableName de la siguiente manera:

b.DestinationTableName = string.Format("[{0}].[{1}]", schemaName, tableName);

o

b.DestinationTableName =
    string.Format("[{0}].[{1}].[{2}]", databaseName, schemaName, tableName);

Dado que BULK INSERT siempre ha admitido un nombre de tabla completamente calificado, parece un gran descuido el hecho de que esos componentes separados nunca llegaron a la API.

Además, como parece que DestinationTableName simplemente se envía a una declaración BULK INSERT , esta propiedad puede ser vulnerable a la inyección de SQL. Entonces, si está obteniendo esta información de un usuario en algún momento, asegúrese de limpiar la entrada antes de ejecutar esta operación.



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué