Используя SqlBulkCopy, как вставить данные в таблицу в схеме базы данных не по умолчанию? - PullRequest
9 голосов
/ 02 декабря 2010

Мне нужно вставить данные в таблицу в схеме с именем Staging, используя SqlBulkCopy.

Похоже, API-интерфейс позволяет устанавливать имя целевой таблицы только с помощью свойства DestinationTableName.

Как мне это сделать?Возможно ли это?

1 Ответ

14 голосов
/ 02 декабря 2010

Хотя API не предоставляет явного интерфейса для установки схемы назначения, вы можете фактически вставить квалифицированное имя таблицы, состоящее из 2 или 3 частей, в свойство DestinationTableName , например:

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

или

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

Учитывая, что BULK INSERT всегда поддерживал полное имя таблицы, кажется большим упущением, что эти отдельные компоненты никогда не попадали в API.

Более того, поскольку DestinationTableName просто выводится в оператор BULK INSERT, это свойство может быть уязвимо для внедрения SQL. Поэтому, если вы в какой-то момент получаете эту информацию от пользователя, обязательно выполните санитарную обработку ввода перед выполнением этой операции.

...