2012-07-27 1 views
2

Есть ли альтернативы утилите sqlcmd для создания db из файла .sql?Альтернативы sqlcmd в sql server 2008 SP2

Я получаю эти синтаксические ошибки из-за символов, присутствующих в столбцах данных таблицы. Мой .sql-файл имеет размер 8 ГБ, и даже я могу исправить запись, которая, по мнению sqlcmd, плоха, требуется некоторое время, чтобы сохранить и повторно открыть файл, если есть больше записей с столбцами, содержащими данные, такие как знак% или «(" ., который SQLCMD не так, как я использовал ошибки на Игнорирование директивы, но это не помогло

Вот мой другой пост в отношении того же вопроса:.

sqlcmd runs into error while parsing my .sql file

+2

Ваша проблема не Sqlcmd, это то, что у вас есть один сценарий 8GB SQL. Я понимаю, что может быть хорошо иметь все в одном месте для развертывания (я предполагаю, что это ваша цель здесь), но просто невозможно поддерживать и устранять неполадки. Почему бы не разделить его на несколько файлов, по одному на объект или по типу объекта (tables.sql и т. Д.) И иметь сценарий оболочки для их выполнения? – Pondlife

+1

Было бы лучше исправить проблему с SSMS при генерации сценария, чем игнорировать операторы с помощью «%» и «(» в них. Не является ли реальным вопросом, как заставить исполняемые вставки SSMS-скриптов выполнять, когда данные содержат a '%' или a '('? –

+0

@ Code12: должен ли ваш файл быть фактическим статусом SQL? Если нет, есть другие способы извлечь схему и данные, чтобы размер _should_ не был проблемой, а сами данные должно быть хорошо, так как оно было бы в двоичном формате. Я имею в виду SQL Server Data Tools (SSDT) ​​(http://msdn.microsoft.com/en-us/data/gg427686). Он бесплатный, может подключаться к Visual Studio Express (также бесплатно) и позволяет извлекать все или некоторые таблицы (с или без данных) в двоичный файл '.dacpac', который может быть импортирован через другую строку соединения. –

ответ

0

Это мое обычное решение. Это просто скрипт powershell, который может выполнять гигантские .sql-файлы.

$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%