我在底部运行Powershell脚本时收到此错误消息:
Exception calling "EnumScript" with "1" argument(s): "Script failed for Table 'dbo.Product'. "
At :line:48 char:35
+ foreach ($s in $scripter.EnumScript <<<< ($tbl)) { write-host $s }
但是,当我注释掉output_file行时
#$output_file="C:\Product.sql"
(不会将Scripter选项设置为写入文件),它可以正常工作并将INSERT语句输出到控制台。
这是失败的脚本,我缺少什么吗?
# Script INSERTs for given table
param
(
[string] $server,
[string] $database,
[string] $schema,
[string] $table,
[string] $output_file
)
$server="devdidb02"
$database="EPCTrunk_EPC"
$schema="dbo"
$table="Product"
$output_file="C:\Product.sql"
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SMO") | out-null
$srv = New-Object "Microsoft.SqlServer.Management.SMO.Server" $server
$db = New-Object ("Microsoft.SqlServer.Management.SMO.Database")
$tbl = New-Object ("Microsoft.SqlServer.Management.SMO.Table")
$scripter = New-Object ("Microsoft.SqlServer.Management.SMO.Scripter") ($server)
# Get the database and table objects
$db = $srv.Databases[$database]
$tbl = $db.tables | Where-object {$_.schema -eq $schema-and$_.name -eq $table}
# Set scripter options to ensure only data is scripted
$scripter.Options.ScriptSchema = $false;
$scripter.Options.ScriptData = $true;
#Exclude GOs after every line
$scripter.Options.NoCommandTerminator = $true;
if ($output_file -gt "")
{
$scripter.Options.FileName = $output_file
$scripter.Options.ToFileOnly = $true
}
# Output the script
foreach ($s in $scripter.EnumScript($tbl)) { write-host $s }
最佳答案
我同时运行了您和Keith的文件,问题似乎出在您为文件设置的路径中。我能够重现您的错误。您正在使用$output_file="C:\Product.sql"
。然后我将路径更改为:$output_file="$home\Product.sql"
,它运行得很好,并给了我文件。
我猜这是因为我没有写c:\的权限,这可能是您遇到的问题。
顺便说一句-在这种情况下,我的主目录是我用于登录的用户文件夹,因此我可以在其中找到它。
关于sql-server - SQL Server脚本数据:输出到文件时,SMO.Scripter不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3891952/