Может ли SqlBulkCopy создать таблицу вроде SELECT INTO?
Может ли SqlBulkCopy создать таблицу из выбора Sql
Ответы (2)
Я думаю, что ответ выше был не совсем ясным.
Вы должны создать таблицу с помощью SQL. Другого пути нет. А если вам нужно просто создать структуру столбцов, то это довольно просто, если ваш источник находится на том же сервере, достаточно сделать это:
Select * from source_table into destination_table where 1=2
Если ваш источник находится не на том же сервере (например, это файл excel или dbf или что-то еще), проще всего подключиться к нему с помощью ODBC (или SQL, если возможно) и отправить ему:
Select * from source_table where 1=2
а затем соберите результат в DataTable. Затем на втором этапе вы должны создать хранимую процедуру на целевом сервере, которая будет принимать эту таблицу в качестве аргумента, а затем вставлять ее в новую таблицу.
Точнее, попробуйте это для процедуры SQL: http://www.builderau.com.au/program/sqlserver/soa/Passing-table-valued-parameters-in-SQL-Server-2008/0,339028455,339282577,00.htm
И создайте объект SqlCommnand в C # и добавьте в его коллекцию параметров SqlParameter, который является SqlDbType.Structured
Я не вдавался в подробности, но надеюсь, что это может помочь.
Похоже, что SqlBulkCopy не может самостоятельно создавать таблицы. Целевая таблица должна быть предварительно определена. В случае, если у пункта назначения есть автоинкрементный идентификатор (int), просто используйте 1 в операторе выбора, т.е.
SELECT
1,
[ColumnName],
[ColumnName]...
FROM TABLENAME
SQL Server будет обрабатывать автоматическое приращение самостоятельно.