Option Explicit Dim SCRIPT_DIRECTORY, SQL_SERVERNAME, SQL_DBNAME SCRIPT_DIRECTORY = GetArgs( "w", "" ) 'working directory on local machine SQL_SERVERNAME = GetArgs( "s", "localhost" ) SQL_DBNAME = GetArgs( "d", "MyDB" ) 'SQL DMO Constants Const SQLDMOScript_Default = 4 const SQLDMODep_Children = 262144 'List all Microsoft® SQL Server components that depend on the referenced SQL Server component. const SQLDMOScript_IncludeHeaders = 131072 'Apply descending order to returned list. const SQLDMOScript_DRI_AllConstraints=520093696 'SQLDMOScript_DRI_Checks, SQLDMOScript_DRI_Defaults, SQLDMOScript_DRI_ForeignKeys, SQLDMOScript_DRI_PrimaryKey, and SQLDMOScript_DRI_UniqueKeys const SQLDMOScript_ToFileOnly = 64 'output file const SQLDMOScript_OwnerQualify = 262144 'object owner const SQLDMOScript_PrimaryObject = 4 'Generate Transact-SQL creating the referenced component. const SQLDMOScript_ObjectPermissions = 2 'Include Transact-SQL privilege defining statements when scripting database objects. const SQLDMOScript_IncludeIfNotExists =4096 'if exists const SQLDMOScript_Indexes = 73736 'indexs const SQLDMOScript_Triggers = 16 'triggers const SQLDMOScript_Drops = 1 'Generate Transact-SQL to remove the referenced component. Script tests for existence prior attempt to remove component. const SQLDMOScript2_NoCollation = 8388608 'no collation dim options1 options1 = SQLDMOScript_Default _ OR SQLDMOScript_Indexes _ Or SQLDMOScript_DRI_AllConstraints _ Or SQLDMOScript_ToFileOnly _ OR SQLDMOScript_Triggers dim options2 options2 = SQLDMOScript2_NoCollation Dim oSQLServer 'As SQLDMO.SQLServer2 Dim oDatabase 'As SQLDMO.Database2 Dim oDatabaseObject Dim sScript 'As String Dim oFSO 'As Scripting.FileSystemObject Dim oFolder 'As Folder Dim oFile Dim sFileName 'As String Dim sFileNamePrefix '============================================================================================ 'Script every table, view, stored proc, rule, default, function in the database '============================================================================================ Set oFSO = wScript.CreateObject("Scripting.FileSystemObject") 'set up clean working directory set oFolder = oFSO.GetFolder(SCRIPT_DIRECTORY) For Each oFile In oFolder.Files oFile.Delete True Next Set oFile = Nothing Set oFolder = Nothing Set oFSO = Nothing 'establish SQL Server and FSO environments Set oSQLServer = CreateObject("SQLDMO.SQLServer2") oSQLServer.LoginSecure = True oSQLServer.Connect SQL_SERVERNAME Set oDatabase = oSQLServer.Databases(SQL_DBNAME) sFileNamePrefix = SQL_DBNAME & "." '---------------- 'Get all objects '---------------- GetObjects("Tables") GetObjects("Views") GetObjects("StoredProcedures") GetObjects("Rules") GetObjects("Defaults") GetObjects("UserDefinedFunctions") '-------- 'clean up '-------- oSQLServer.Close Set oDatabase = Nothing Set oSQLServer = Nothing On Error Goto 0 '---------------------------------------------------------------------- Sub GetObjects(byVal objType) 'cycle through the objects Select Case objType Case "Tables" For Each oDatabaseObject In oDatabase.Tables If oDatabaseObject.SystemObject Then 'do nothing (bypass system objects) Else sFileName = SCRIPT_DIRECTORY & "\" & sFileNamePrefix & oDatabaseObject.Name & ".Table.sql" oDatabaseObject.Script options1, sFileName, "", options2 End If Next Case "Views" For Each oDatabaseObject In oDatabase.Views If oDatabaseObject.SystemObject Then 'do nothing (bypass system objects) Else sFileName = SCRIPT_DIRECTORY & "\" & sFileNamePrefix & oDatabaseObject.Name & ".View.sql" oDatabaseObject.Script options1, sFileName End If Next Case "StoredProcedures" For Each oDatabaseObject In oDatabase.StoredProcedures If oDatabaseObject.SystemObject Then 'do nothing (bypass system objects) Else sFileName = SCRIPT_DIRECTORY & "\" & sFileNamePrefix & oDatabaseObject.Name & ".StoredProcedure.sql" oDatabaseObject.Script options1, sFileName End If Next Case "Defaults" For Each oDatabaseObject In oDatabase.Defaults sFileName = SCRIPT_DIRECTORY & "\" & sFileNamePrefix & oDatabaseObject.Name & ".Default.sql" oDatabaseObject.Script options1, sFileName, "", options2 Next Case "Rules" For Each oDatabaseObject In oDatabase.Rules sFileName = SCRIPT_DIRECTORY & "\" & sFileNamePrefix & oDatabaseObject.Name & ".Rule.sql" oDatabaseObject.Script options1, sFileName Next Case "UserDefinedDataTypes" For Each oDatabaseObject In oDatabase.UserDefinedDataTypes sFileName = SCRIPT_DIRECTORY & "\" & sFileNamePrefix & oDatabaseObject.Name & ".UDD.sql" oDatabaseObject.Script options1, sFileName Next Case "UserDefinedFunctions" For Each oDatabaseObject In oDatabase.UserDefinedFunctions sFileName = SCRIPT_DIRECTORY & "\" & sFileNamePrefix & oDatabaseObject.Name & ".Function.sql" oDatabaseObject.Script options1, sFileName Next End Select End Sub '----------------------------------------------------- Function GetArgs( sSwitch, sDefaultValue ) '----------------------------------------------------- ' Checks the command line arguments for a given switch and returns the associated ' string, if found. If not found, the defaultValue is returned instead. dim ArgCount, bMatch ArgCount = 0 bMatch = 0 do while ArgCount < WScript.arguments.length if Eval((WScript.arguments.item(ArgCount)) = ("-" + (sSwitch))) Or Eval((WScript.arguments.item(ArgCount)) = ("/" + (sSwitch))) then bMatch = 1 Exit do else ArgCount = ArgCount + 1 end if Loop if ( bMatch = 1 ) then GetArgs = ( WScript.arguments.item(ArgCount + 1) ) else GetArgs = ( sDefaultValue ) end if End Function