将 SQL Server 脚本化为多个 SQL 脚本

1 sql-server

我有一个包含 2GB 数据的 SQL Sever 表。我可以为文件创建脚本。但是脚本文件没有打开。我想将该脚本文件拆分为多个脚本文件。

von*_*ryz 5

前段时间我写了一个 Powershell 脚本,它将一个巨大的 SQL 脚本分成更易于管理的块。(这样做的原因是将整个数据库从 2008R2 导出到不同组织的 2008 系统。)

较小的文件可以使用 Management Studio 或通过运行sqlcmd -i. 脚本如下。它使用 25000 行作为限制,在我的测试用例中,它创建了每个大约 6 Mb 的 sql 文件。调整$MAX以适合您的特定需求。

$src = "c:\temp\myBigScript.sql"
$dst = "c:\temp\mySmallScript-{0}.sql"
$reader = new-object IO.StreamReader($src)
$count = 1
$filename = ($dst -f ($count)) 

$row = 0
$MAX = 25000

$sb = new-object Text.StringBuilder
# Read the source row by row into a buffer
while(($line = $reader.ReadLine()) -ne $null){
    $row++
    [void]$sb.Append($line)
    [void]$sb.Append([Environment]::NewLine)

    # Till $MAX rows are read
    if($row -ge $MAX){
        # Write the buffer contents into a file and reset the buffer
        add-content -path $filename -value $($sb.ToString())
        $sb = new-object Text.StringBuilder
        ++$count
        $filename = ($dst -f ($count))
        $row = 0
    }
}
$reader.Close()
Run Code Online (Sandbox Code Playgroud)

至于如何输入数据,for /lcmd 会话中的循环效果很好。将循环上限更改为实际文件数,而不是使用8.

for /l %i in (1 1 8) do sqlcmd -S myServer\myInstance -E -i mySmallScript-%i.sql
Run Code Online (Sandbox Code Playgroud)

您可以根据您的数据-Encoding UTF8在 powrshell 脚本add-content行或任何编码类型中使用,例如

add-content -Encoding UTF8 -path $filename -value $($sb.ToString())
Run Code Online (Sandbox Code Playgroud)

这将修复要正确添加的 Unicode 字符。