-
Notifications
You must be signed in to change notification settings - Fork 4
/
ScriptDBDiagrams.ps1
46 lines (39 loc) · 1.71 KB
/
ScriptDBDiagrams.ps1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
param($server=".", $database, $outputFolder="diagrams")
#File path no trailing backslashes!
# http://joelmansford.wordpress.com/2008/04/01/scripting-sql-server-diagrams-to-files-for-source-control/
# http://stackoverflow.com/questions/895228/add-database-diagram-to-source-control/895277#895277
if ( -not (Test-Path $outputFolder) ) {New-Item $outputFolder -Type Directory | Out-Null}
$conn = new-object System.Data.SqlClient.SqlConnection
# Timeout is in seconds, extended from 30sec default to cope with databases with many diagrams
# https://github.com/timabell/database-diagram-scm/issues/1
$conn.ConnectionString = "server=" + $server + ";integrated security=true;database=" + $database
"Server: '" + $server + "' database: '" + $database + "'"
$conn.Open()
$cmd = new-object System.Data.SqlClient.SqlCommand
$cmd.Connection=$conn
foreach ($f in Get-ChildItem -path "lib\" -Filter *.sql | sort-object )
{
"Installing prequisite 'lib\" + $f + "'"
$cmd.CommandText = [IO.File]::ReadAllText("lib\" + $f) # http://stackoverflow.com/a/7976784/10245
$result = $cmd.ExecuteNonQuery()
}
"Requesting diagram definitions..."
$cmd.CommandText = "EXEC [dbo].[spDev_ScriptDiagrams] @name = NULL"
$timeout = 300;
$cmd.CommandTimeout = $timeout;
"Timeout set to " + $timeout + " seconds..."
$dr=$cmd.ExecuteReader()
while ($dr.Read()) {
$name = $dr.GetValue(0)
$f = $outputFolder+"\"+$name+".sql"
$line = $dr.GetValue(1)
$line | out-file $f -encoding ASCII
"Scripted '"+$name+"' to " +$f
}
$dr.Close()
"Diagrams retrieved. Cleaning prerequisites..."
$cmd.CommandText = [IO.File]::ReadAllText("lib\1-cleanup.sql")
$result = $cmd.ExecuteNonQuery()
"Closing connections..."
$conn.Close()
"Done."