Как я могу создать таблицу базы данных из объекта system.Data.datatable? - PullRequest
0 голосов
/ 14 февраля 2011

Предположим, у меня есть следующий код PowerShell:

$connectionstring = "... some connection ..."
$sql = "Select * from Sometable"
$tablename= 'Copy_of_Sometable' 

$cmd = New-Object system.Data.OleDb.OleDbCommand($sql,$connectionstring)
$da = New-Object system.Data.OleDb.OleDbDataAdapter($cmd)
$dt = New-Object system.Data.datatable
[void]$da.fill($dt)

Я знаю, что могу получить сценарий создания таблицы из $ dt и использовать его для создания новой таблицы с заданным именем cf. например .

Но есть ли более прямой способ создания новой таблицы с предоставленным именем (пустым или уже заполненным) из объекта, доступного для данных?

Ответы [ 3 ]

3 голосов
/ 15 февраля 2011

Я создал функцию add-sqltable, которая будет принимать данные в качестве входных данных и создавать таблицу SQL Server с использованием SMO.

Функция доступна в PoshCode и СценарииРепозиторий Guy Script .Я написал об этом для гостевого поста Scripting Guy .

1 голос
/ 15 февраля 2011

Используя System.Data.Datatable, вы должны использовать описанный метод.

Однако более прямой метод доступен, если вы используете SQL 2008. Командлет Invoke-SqlCmd позволит вам сделать так, как предложил Ekkehard.Horner SELECT * INTO newtable FROM oldtable. (к сожалению, копирование не поддерживается)

Конечно, system.Data.OleDb.OleDbCommand работает для того же.

1 голос
/ 14 февраля 2011

В зависимости от возможностей драйвера вы можете преуспеть с помощью одного оператора SQL, например:

"SELECT * INTO newtable FROM oldtable"

С ODBC и Jet таблицы могут даже иметь значение IN (Ключевое слово) разные базы данных.


Поскольку мне действительно нравятся команды «INSERT / SELECT INTO IN», и я никогда раньше не использовал Powershell для работы с базой данных:

(Edited) Powershell session:

  PS C:\Documents and Settings\eh\My Documents\WindowsPowerShell>
    $CS="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=<SOMEWHERE>\Nwind.mdb"
    $SQL="SELECT * INTO CusCopy FROM Customers"
    $cmd = New-Object system.Data.OleDb.OleDbCommand($SQL,$CS)
    $cmd.Connection.Open()
    $cmd.ExecuteNonQuery()
    91 

Please take the "91" as evidence that the command affected==inserted the 91
customers from the original table to the copy.

    $SQL="SELECT * INTO [customer.csv] IN '' 'text;HDR=YES;Database=<SOMEWHERE>' FROM Customers"
    $cmd = New-Object system.Data.OleDb.OleDbCommand($SQL,$CS)
    $cmd.Connection.Open()
    $cmd.ExecuteNonQuery()
    91
    dir
    Directory: <SOMEWHERE>
    Mode                LastWriteTime     Length Name
    ----                -------------     ------ ----
    -a---        14.02.2011     22:09      13395 customer.csv
    -a---        14.02.2011     22:01    2576384 Nwind.mdb
    -a---        14.02.2011     22:09        394 schema.ini

A table .csv and a schema.ini (entry) were newly/dutifully created.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...