2015-08-25 67 views
0

所以我需要每次腳本運行時用文本文件中的數據更新現有的表。我當前的代碼會丟棄表格並在每次運行時創建一個新表格,這會導致我需要避免大約10秒的延遲。我想改爲更新數據而不重新創建表(希望緩解延遲?)。我知道UPDATEMERGE命令可以用於此,但一直未能弄清楚語法。使用Powershell更新/插入SQL表

Function CreateAnalystTable($location, $file, $extension, $server, $database) 
{ 
    $full = $location + $file + $extension 
    $all = Get-Content $full 
    $columns = $all[0] 
     $columns = $columns.Replace(";","] VARCHAR(255), [") 
    $table = "CREATE TABLE " + $file + "([" + $columns + "] VARCHAR(255))" 
    $connection = New-Object System.Data.SqlClient.SqlConnection 
    $buildTable = New-Object System.Data.SqlClient.SqlCommand 
    $insertData = New-Object System.Data.SqlClient.SqlCommand 
    $connection.ConnectionString = "Data Source=" + $server + ";Database=" + $database + ";integrated security=true" 
    $buildTable.CommandText = $table 
    $buildTable.Connection = $connection 
    ## Added to function 
    $x = 0 
    $insertData.CommandText = "EXECUTE stp_CommaBulkInsert @1,@2" 
    $insertData.Parameters.Add("@1", $full) 
    $insertData.Parameters.Add("@2", $file) 
    $insertData.Connection = $connection 
    $connection.Open() 
    $buildTable.ExecuteNonQuery() 
    $connection.Close() 
    ## Added to function 
    $x = 1 
    if ($x = 1) 
    { 
     $connection.Open() 
     $insertData.ExecuteNonQuery() 
     $connection.Close() 
    } 
} 
CreateAnalystTable -location "PATH" -file "FILE" -extension ".txt" -server "SERVER" -database "DB" 

SQL:

CREATE PROCEDURE stp_CommaBulkInsert 
@file NVARCHAR(250), @table NVARCHAR(250) 
AS 
BEGIN 
DECLARE @f NVARCHAR(250), @t NVARCHAR(250), @s NVARCHAR(MAX) 
SET @f = @file 
SET @t = @table 

SET @s = N'BULK INSERT ' + @t + ' 
    FROM ''' + @f + ''' 
    WITH (
    FIELDTERMINATOR = '';'' 
    ,ROWTERMINATOR = ''0x0a'' 
    ,FIRSTROW=2 
)' 

EXEC sp_executesql @s 
END 

任何幫助表示讚賞

+0

[This](http://stackoverflow.com/questions/16979860/sql-update-table-from-a-text-file)可能會幫助你。 – BJones

回答

0

我沒有做過PowerShell的編碼,但這段代碼將始終運行和執行,但我不明白爲什麼這是必需的。除非你需要兩次運行你的stp。

$x = 1 
if ($x = 1) 
{ 
    $connection.Open() 
    $insertData.ExecuteNonQuery() 
    $connection.Close() 
} 

對於UPDATE語句,我將使用此站點作爲基本UPDATE語句的示例。

http://www.w3schools.com/sql/sql_update.asp

只要改變你的$表和$列,以適應格式,它應該運行。

+0

對不起忘了提及我將循環它,我需要表中的數據儘可能快地重複更新。也許SQL不是最好的?還有其他想法嗎? –

+0

數據庫非常適合您的需求,但如果您要運行基本的更新數據,我會在shell或其他程序中運行它,直到完成爲止。然後我會在完成後更新數據庫。 – jcameron47