sql-server - SQL Server脚本数据:输出到文件时,SMO.Scripter不起作用

标签 sql-server powershell smo

我在底部运行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/

相关文章:

sql-server - MySQL CURTIME() 的 T-SQL 版本

powershell - 如何在 PowerShell 中删除重音符号?

sql-server - 使用 SMO 重新启动 SQL Server 实例

sql-server - 当 2005 实例存在时,Smo 不显示 2008 SQL Server 实例

java - SQL Server - 查询空表的性能差异

php - 无法调用函数 sqlsrv_connect()

asp.net - 如何从控制台运行 Azure 部署 PowerShell 脚本

regex - Powershell 替换多行

MS SQL Server 跟踪日志的收集

sql-server - SQL Server 全文搜索转义字符?