Last active
February 12, 2024 00:18
-
-
Save badmotorfinger/1755925 to your computer and use it in GitHub Desktop.
Generates scripts for most SQL Server database objects using PowerShell (SMO objects)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
################################################################################################################################ | |
# | |
# Script Name : SmoDb | |
# Version : 1.0 | |
# Author : Vince Panuccio | |
# Purpose : | |
# This script generates one SQL script per database object including Stored Procedures,Tables,Views, | |
# User Defined Functions and User Defined Table Types. Useful for versionining a databsae in a CVS. | |
# | |
# Usage : | |
# Set variables at the top of the script then execute. | |
# | |
# Note : | |
# Only tested on SQL Server 2008r2 | |
# | |
################################################################################################################################ | |
$server = "localhost" | |
$database = "NerdDinner" | |
$output_path = "C:\dev\nerddinner\Schema" | |
$schema = "dbo" | |
$table_path = "$output_path\Table\" | |
$storedProcs_path = "$output_path\StoredProcedure\" | |
$triggers_path = "$output_path\Triggers\" | |
$views_path = "$output_path\View\" | |
$udfs_path = "$output_path\UserDefinedFunction\" | |
$textCatalog_path = "$output_path\FullTextCatalog\" | |
$udtts_path = "$output_path\UserDefinedTableTypes\" | |
[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 -not $_.IsSystemObject } | |
$storedProcs = $db.StoredProcedures | Where-object { $_.schema -eq $schema -and -not $_.IsSystemObject } | |
$triggers = $db.Triggers + ($tbl | % { $_.Triggers }) | |
$views = $db.Views | Where-object { $_.schema -eq $schema } | |
$udfs = $db.UserDefinedFunctions | Where-object { $_.schema -eq $schema -and -not $_.IsSystemObject } | |
$catlog = $db.FullTextCatalogs | |
$udtts = $db.UserDefinedTableTypes | Where-object { $_.schema -eq $schema } | |
# Set scripter options to ensure only data is scripted | |
$scripter.Options.ScriptSchema = $true; | |
$scripter.Options.ScriptData = $false; | |
#Exclude GOs after every line | |
$scripter.Options.NoCommandTerminator = $false; | |
$scripter.Options.ToFileOnly = $true | |
$scripter.Options.AllowSystemObjects = $false | |
$scripter.Options.Permissions = $true | |
$scripter.Options.DriAllConstraints = $true | |
$scripter.Options.SchemaQualify = $true | |
$scripter.Options.AnsiFile = $true | |
$scripter.Options.SchemaQualifyForeignKeysReferences = $true | |
$scripter.Options.Indexes = $true | |
$scripter.Options.DriIndexes = $true | |
$scripter.Options.DriClustered = $true | |
$scripter.Options.DriNonClustered = $true | |
$scripter.Options.NonClusteredIndexes = $true | |
$scripter.Options.ClusteredIndexes = $true | |
$scripter.Options.FullTextIndexes = $true | |
$scripter.Options.EnforceScriptingOptions = $true | |
function CopyObjectsToFiles($objects, $outDir) { | |
if (-not (Test-Path $outDir)) { | |
[System.IO.Directory]::CreateDirectory($outDir) | |
} | |
foreach ($o in $objects) { | |
if ($o -ne $null) { | |
$schemaPrefix = "" | |
if ($o.Schema -ne $null -and $o.Schema -ne "") { | |
$schemaPrefix = $o.Schema + "." | |
} | |
$scripter.Options.FileName = $outDir + $schemaPrefix + $o.Name + ".sql" | |
Write-Host "Writing " $scripter.Options.FileName | |
$scripter.EnumScript($o) | |
} | |
} | |
} | |
# Output the scripts | |
CopyObjectsToFiles $tbl $table_path | |
CopyObjectsToFiles $storedProcs $storedProcs_path | |
CopyObjectsToFiles $triggers $triggers_path | |
CopyObjectsToFiles $views $views_path | |
CopyObjectsToFiles $catlog $textCatalog_path | |
CopyObjectsToFiles $udtts $udtts_path | |
CopyObjectsToFiles $udfs $udfs_path | |
Write-Host "Finished at" (Get-Date) |
Sorry mate, I haven't used this script for years so I have no idea anymore :)
Hi Maxime,
I changed the script to my needs.
This is working remotely for me, hope it works for you too.
Kind regards,
Martijn
Fantastic! 😃
Hi Maxime,
I changed the script to my needs.
This is working remotely for me, hope it works for you too.Kind regards,
Martijn
Thank you so much mcbos !! it works great !
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Hello
I'm still struggling with this code
So i'm using this code from a remote computer connected to a DBserver
So i could connect to my server this time
The script is able to see the DB, the table, the view. i can see everything when i check the variables
He creates the folders but there is no data
I have check the rights of the folder
I'm admin of my computer
I have even put the group "everyone" on the folder
Have you test remotely on your side?
Kind Regards
Maxime