2011-02-14 5 views
0

다음과 같은 PowerShell 코드가 있다고 가정 해 보겠습니다.어떻게하면 system.Data.datatable 개체에서 데이터베이스 테이블을 만들 수 있습니까?

$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의 새 테이블을 만들 수 있습니다. for example.

그러나 datatable 개체에서 제공된 이름 (비어 있거나 이미 채워진)을 사용하여 새 테이블을 만드는 더 직접적인 방법이 있습니까?

답변

3

add-sqltable이라는 함수를 만들었습니다.이 함수는 데이터 테이블을 입력으로 사용하고 SMO를 사용하여 SQL Server 테이블을 만듭니다.

이 기능은 PoshCodeScripting Guy Script Repository에서 사용할 수 있습니다. 나는 Scripting Guy guest post에 대해 그것에 관해 blogged했다.

1

드라이버의 능력에 따라 같은 하나의 SQL 문으로 성공할 수 :

도 (키워드) 다른에있을 수 있습니다 ODBC 및 Jet 테이블로

"oldtable FROM newtable SELECT * INTO" 데이터베이스.


내가 정말 좋아 "INSERT/IN INTO SELECT"때문에 명령 (들) 및 이전 데이터베이스 '작업'에 대한 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. 
1

꽤 많이 System.Data.Datatable 사용해야 사용 설명 된 방법. 당신은 SQL 2008을 사용하는 경우보다 직접적인 방법을 사용할 수 그러나 Ekkehard.Horner이 SELECT * INTO newtable FROM oldtable을 제안

Invoke-SqlCmd cmdlet은 당신이 할 수있게된다. (안타깝게도 copy-item은 지원되지 않습니다)

물론 system.Data.OleDb.OleDbCommand도 똑같이 작동합니다.

관련 문제