2012-07-27 35 views
2

sqlcmd實用程序是否有任何替代方法可用於從.sql文件創建數據庫?SQL Server 2008 SP2中sqlcmd的替代方案

由於表格數據列中存在字符,我得到這些語法錯誤。我的.sql文件的大小是8GB,即使我可以修復sqlcmd認爲是壞的記錄,但如果有更多包含數據(如%符號或「(」)數據的列的記錄,則需要一段時間才能保存並重新打開文件) ,這SQLCMD不喜歡我用的上的錯誤忽略指令,但沒有太大的幫助

這裏是我的關於同一問題的其他職位。

sqlcmd runs into error while parsing my .sql file

+2

你的問題不是SQLCMD,那就是你有一個單條8GB SQL腳本。我知道將所有東西放在一個地方進行部署可能會很好(我認爲這是您的目標),但根本無法維護和排除故障。爲什麼不把它分成多個文件,每個對象或每個對象類型(tables.sql等),並有一個包裝腳本來執行它們呢? – Pondlife 2012-07-27 20:24:28

+1

最好是在生成腳本時修復SSMS的問題,而不是忽略其中包含'%'和'('的語句。是不是真正的問題,當數據包含SSMS腳本時,如何生成可運行的插入語句'%'或者'('?' – 2012-07-27 20:56:11

+0

@ Code12:你的文件是否需要實際的SQL語句?如果沒有,還有其他方法可以提取模式和數據,以使大小不應該成爲問題,數據本身應該沒問題,因爲它會以二進制格式。我在考慮SQL Server數據工具(SSDT)(http://msdn.microsoft.com/zh-cn/data/gg427686)。它是免費的,可以掛接到Visual Studio Express(也是免費的),並允許您將所有或部分表(帶或不帶數據)提取到可通過另一個連接字符串導入的二進制'.dacpac'文件中。 – 2014-09-26 20:20:45

回答

0

這是我的自定義解決方案。它只是一個可以執行巨大的.sql文件的powershell腳本。

$filePath = "GiganticFile.sql"; 
$stream = [System.IO.File]::OpenText($filePath); 
$connection = New-Object System.Data.SqlClient.SqlConnection; 
$connection.ConnectionString = "Persist Security Info=True;User ID=<user>;Password=<password>;Initial Catalog=<database>;Data Source=<server>"; 
$connection.Open(); 
$command = New-Object System.Data.SqlClient.SqlCommand; 
$command.Connection = $connection; 
$statement = ""; 
$statementsProcessed = 0; 
$totalBytes = (New-Object System.IO.FileInfo($filePath)).Length; 
$bytesProcessed = 0; 

while (-not $stream.EndOfStream) { 
    $line = $stream.ReadLine(); 
    $bytesProcessed += $line.Length; 
    if ($line.Trim() -eq "GO") { 
     try { 
      $command.CommandText = $statement; 
      [void]$command.ExecuteNonQuery(); 
      $statement = ""; 
      "{0} statements processed ({1:f} MB) - {2:f}%" -f (++$statementsProcessed), ($bytesProcessed/1024/1024), ($bytesProcessed/$totalBytes * 100); 
     } 
     catch { 
      "!!! ERROR !!!"; 
      $Error; 
     } 
    } 
    else { 
     $statement += $line + [Environment]::NewLine; 
    } 
}  
$stream.Close(); 

輸出樣本:

137238 statements processed (544.54 MB) - 7.57% 
137239 statements processed (544.55 MB) - 7.57% 
137240 statements processed (544.56 MB) - 7.57% 
137241 statements processed (544.57 MB) - 7.57% 
137242 statements processed (544.58 MB) - 7.57% 
137243 statements processed (544.59 MB) - 7.57% 
137244 statements processed (544.60 MB) - 7.57% 
137245 statements processed (544.61 MB) - 7.57% 
137246 statements processed (544.63 MB) - 7.58% 
137247 statements processed (544.64 MB) - 7.58% 
137248 statements processed (544.65 MB) - 7.58% 
137249 statements processed (544.66 MB) - 7.58% 
137250 statements processed (544.67 MB) - 7.58% 
137251 statements processed (544.68 MB) - 7.58% 
137252 statements processed (544.69 MB) - 7.58% 
137253 statements processed (544.70 MB) - 7.58%