1

I get this error message when I run the Powershell script at the bottom:

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 }

However, when I comment out the output_file line

#$output_file="C:\Product.sql"

(which won't set the Scripter options to write to file), it works fine and outputs the INSERT statments to the console.


Here's the failing script, is there something I'm missing?

# 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 }

2 Answers 2

3

I ran both yours and Keith's and it looks like the issue is in the path you are setting for the file. I was able to reproduce your error. You were using $output_file="C:\Product.sql". Then I changed the path to: $output_file="$home\Product.sql" it ran just fine and gave me the file.

I am guessing that the reason for this is that I don't have permission to write to c:\ which may be the problem you are having.

BTW - my home dir in this case for me is my user folder for my login so I was able to find it there.

Sign up to request clarification or add additional context in comments.

1 Comment

Ahha, that did it! Of course it was something simple. Guess I was expecting a more descriptive error message.
3

FWIW I'm not able to repro the error you see using the AdventureWorks DB. The following generates the foo.sql file without any errors:

Add-Type -AssemblyName ('Microsoft.SqlServer.Smo, Version=10.0.0.0, ' + `
                        'Culture=neutral, PublicKeyToken=89845dcd8080cc91')

$serverName = '.\SQLEXPRESS'
$smo = new-object Microsoft.SqlServer.Management.Smo.Server $serverName
$db  = $smo.Databases['AdventureWorks']
$tbl = $db.Tables | Where {$_.Schema -eq 'Production' -and `
                           $_.Name -eq 'Product'}

$output_file = "$home\foo.sql"

$scripter = new-object Microsoft.SqlServer.Management.Smo.Scripter $serverName
$scripter.Options.ScriptSchema = $false; 
$scripter.Options.ScriptData = $true; 
$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 } 

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.