Here is a VB6 or VBA script to do one db, you could easily adapt to script them all...
Sub ScriptDatabase(dbname As String, outfile As String)
'
' this procedure requires a reference to:
'
' Microsoft SQLDMO Object Library
'
Dim svr As SQLDMO.SQLServer
Dim dbs As SQLDMO.Database
Dim tbl As SQLDMO.Table
Dim idx As SQLDMO.Index
Dim trg As SQLDMO.Trigger
Dim chk As SQLDMO.Check
Dim viw As SQLDMO.View
Dim prc As SQLDMO.StoredProcedure
'
Dim db2 As SQLDMO.Database2
Dim fnc As SQLDMO.UserDefinedFunction
'
Dim sql As String
'
On Error GoTo err_sub
'
Screen.MousePointer = vbHourglass
'
' init output file
Open outfile For Output As #1
'
' SERVER
Set svr = New SQLDMO.SQLServer
svr.LoginSecure = True
svr.Connect "localhost"
'
' DATABASE
Set dbs = svr.Databases(dbname, "dbo")
sql = dbs.Script
Print #1, sql
'
' TABLES
For Each tbl In dbs.Tables
If Not tbl.SystemObject Then
sql = tbl.Script
Print #1, sql
For Each idx In tbl.Indexes
sql = idx.Script
Print #1, sql
Next idx
For Each trg In tbl.Triggers
sql = trg.Script
Print #1, sql
Next trg
For Each chk In tbl.Checks
sql = chk.Script
Print #1, sql
Next chk
End If
Next tbl
'
' VIEWS
For Each viw In dbs.Views
If Not viw.SystemObject Then
sql = viw.Script
Print #1, sql
End If
Next viw
'
' STORED PROCEDURES
For Each prc In dbs.StoredProcedures
If Not prc.SystemObject Then
sql = prc.Script
Print #1, sql
End If
Next prc
'
' FUNCTIONS
Set db2 = svr.Databases(dbname, "dbo")
'
For Each fnc In db2.UserDefinedFunctions
If Not fnc.SystemObject Then
sql = fnc.Script
Print #1, sql
End If
Next fnc
exit_sub:
Screen.MousePointer = vbDefault
Close #1
Set dbs = Nothing
Set db2 = Nothing
svr.DisConnect
Set svr = Nothing
Exit Sub
'
err_sub:
MsgBox Err.Description, , "Error # " & Err.Number
Resume exit_sub
'
End Sub