Dumping stored procedures using boo.

A while ago David Cumps posted about Extracting stored procedure content via SQL.

I liked this post and I knew I wanted to do something with it.  We want to keep a copy of all of our stored procedures in Subversion, our version control system.  This little boo script connects a database server, iterates through all of the stored procedures in all of the databases and outputs them to a directory named after the database.

import System
import System.Data fromSystem.Dataimport System.Data.SqlClient fromSystem.Dataimport System.IO

def Main(argv as (string)):

    Exit = System.Environment.Exit
    mkdir = System.IO.Directory.CreateDirectory

    if(null!=argv and argv.Length>0):
        databasehost = argv[0]
    else:
        databasehost = “MyDefaultDbServer”

    ignoreDatabases= ["master", 'model', 'msdb', 'Northwind', 'pubs', 'tempdb']
    databases=[]

    connectionString = string.Format(”server={0};database=master;Integrated Security=True“,databasehost)
    printusing connection string:“+connectionString
    conn = SqlConnection(connectionString)
    cmd = conn.CreateCommand()
    cmd.CommandText=”SELECT name FROM master.dbo.sysdatabases ORDER BY name”
    conn.Open()
    reader = cmd.ExecuteReader()
    while reader.Read() :
        if ( not ignoreDatabases.Contains( reader.GetString(0) )):
            databases.Add(reader.GetString(0))
    reader.Close()

    print databases

    for database in databases:
        spNames=[]
        mkdir(database)
        cmd = conn.CreateCommand()
        cmd.CommandText = “use ${database};SELECT name FROM sysobjects WHERE type = ‘P’ AND category = 0 ORDER BY name”
        reader = cmd.ExecuteReader()
        while reader.Read() :
            spNames.Add(reader.GetString(0))
        reader.Close()

        print${database}: ${spNames}for spName in spNames:
            cmd = conn.CreateCommand()
            cmd.CommandText = “use ${database}; SELECT text FROM syscomments WHERE id=(SELECT id FROM sysobjects WHERE name=’${spName}’) ORDER BY colid”
            reader = cmd.ExecuteReader()
            outputf = File.CreateText( Path.Combine(database, “${spName}.sql“) )
            while reader.Read():
                outputf.WriteLine(reader.GetString(0))
            reader.Close()
            outputf.Close()
    conn.Close()

powered by performancing firefox

4 Responses to “Dumping stored procedures using boo.”

  1. mmx Says:

    Ok here is a stupid question, but what is boo? Is that a scripting language or something?

  2. jrwren Says:

    Yes, boo is a .NET language heavily inspired by Python. see http://boo.codehaus.org/ Read the Manifesto.

  3. mmx Says:

    cool, I’ll tag that for later reading.

    thanks!

  4. David Cumps Says:

    Nice to see other people have the same idea’s like me ;)

    I posted the statements orginally after creating an application that extracts stored procedures to analyze and put them somewhere as well :)

Leave a Reply