se vi serve e/o volete testarlo... poi se qualcuno ha la buona volontà di provarlo anche su sqlserver![]()
codice:<html> <head> <title>Database Dumper</title> <style type="text/css"> body { font-size:0.75em } h1 { font-size:medium; } hr { height:1px; color:#d0d0d0; } div { width:100%; height:250px; padding:10px; border:1px solid #d0d0d0; overflow:auto; } </style> </head> <body> <form action="" method="post"> Path <input type="text" name="db" size="50" value="<%= Request.Form("DB") %>" /> <input type="submit" value="Dump" /> <input type="checkbox" name="tables" <% If Request.Form("Tables") <> "" Then Response.Write("checked=""checked""") %> /> Tables <input type="checkbox" name="indexes" <% If Request.Form("Indexes") <> "" Then Response.Write("checked=""checked""") %> /> Indexes <input type="checkbox" name="foreignkeys" <% If Request.Form("ForeignKeys") <> "" Then Response.Write("checked=""checked""") %> /> Foreign keys <input type="checkbox" name="data" <% If Request.Form("Data") <> "" Then Response.Write("checked=""checked""") %> /> Data (<input type="checkbox" name="escape" <% If Request.Form("Escape") <> "" Then Response.Write("checked=""checked""") %> /> Escape) </form> <hr /> <% If Request.Form("DB") <> "" Then CONNECTION_STRING = "Provider='Microsoft.Jet.OLEDB.4.0';Data Source='" & Server.MapPath(Request.Form("DB")) & "'" ' Create DB object Set objDB = Server.CreateObject("ADOX.Catalog") ' Open connection objDB.ActiveConnection = CONNECTION_STRING ' Create DB connection object Set objConn = Server.CreateObject("ADODB.Connection") ' Open connection objConn.Open CONNECTION_STRING If Request.Form("Tables") <> "" Then ' Get tables list Set objTables = objDB.Tables Response.Write("<h1>Tables</h1>") Response.Write("<div>") ' Dump tables For i = 0 To objTables.Count - 1 If objTables(i).Type = "TABLE" Then ' Get table columns Set objColumns = objTables(i).Columns ' CREATE TABLE statment strSQL = "CREATE TABLE " & checkName(objTables(i).Name) & " (" ' Add columns declaration For j = 0 To objColumns.Count - 1 strSQL = strSQL & checkName(objColumns(j).Name) Select Case objColumns(j).Type Case "3" ' Long integer strSQL = strSQL & " INTEGER" If objColumns(j).Properties("Autoincrement") = True Then strSQL = strSQL & " IDENTITY" End If If objColumns(j).Properties("Nullable") = False Then strSQL = strSQL & " NOT NULL" End If If objColumns(j).Properties("Autoincrement") = False Then If IsNull(objColumns(j).Properties("Default")) = False Then strSQL = strSQL & " DEFAULT " & objColumns(j).Properties("Default") End If End If Case "5" ' Double precision strSQL = strSQL & " FLOAT" If objColumns(j).Properties("Nullable") = False Then strSQL = strSQL & " NOT NULL" End If If IsNull(objColumns(j).Properties("Default")) = False Then strSQL = strSQL & " DEFAULT " & objColumns(j).Properties("Default") End If Case "7" ' Date strSQL = strSQL & " DATE" If objColumns(j).Properties("Nullable") = False Then strSQL = strSQL & " NOT NULL" End If If IsNull(objColumns(j).Properties("Default")) = False Then strSQL = strSQL & " DEFAULT " & objColumns(j).Properties("Default") End If Case "11" ' Yes / No strSQL = strSQL & " BIT" If objColumns(j).Properties("Nullable") = False Then strSQL = strSQL & " NOT NULL" End If If IsNull(objColumns(j).Properties("Default")) = False Then strSQL = strSQL & " DEFAULT " & objColumns(j).Properties("Default") End If Case "17" ' Byte strSQL = strSQL & " TINYINT" If objColumns(j).Properties("Nullable") = False Then strSQL = strSQL & " NOT NULL" End If If IsNull(objColumns(j).Properties("Default")) = False Then strSQL = strSQL & " DEFAULT " & objColumns(j).Properties("Default") End If Case "72" ' GUID strSQL = strSQL & " UNIQUEIDENTIFIER" If objColumns(j).Properties("Nullable") = False Then strSQL = strSQL & " NOT NULL" End If If IsNull(objColumns(j).Properties("Default")) = False Then strSQL = strSQL & " DEFAULT " & objColumns(j).Properties("Default") End If Case "202" ' Text If objColumns(j).Properties("Fixed Length") = True Then strSQL = strSQL & " CHAR(" & objColumns(j).DefinedSize & ")" Else strSQL = strSQL & " VARCHAR(" & objColumns(j).DefinedSize & ")" End If If objColumns(j).Properties("Jet OLEDB:Compressed UNICODE Strings") = True Then strSQL = strSQL & " WITH COMPRESSION" End If If objColumns(j).Properties("Nullable") = False Then strSQL = strSQL & " NOT NULL" End If If IsNull(objColumns(j).Properties("Default")) = False Then strSQL = strSQL & " DEFAULT " & objColumns(j).Properties("Default") End If If objColumns(j).Properties("Jet OLEDB:Allow Zero Length") = False Then strSQL = strSQL & ",CONSTRAINT " & checkName(objTables(i).Name & "_" & objColumns(j).Name) & " CHECK (" & checkName(objColumns(j).Name) & " <> """")" End If Case "203" ' Memo strSQL = strSQL & " TEXT" If objColumns(j).Properties("Jet OLEDB:Compressed UNICODE Strings") = True Then strSQL = strSQL & " WITH COMPRESSION" End If If objColumns(j).Properties("Nullable") = False Then strSQL = strSQL & " NOT NULL" End If If IsNull(objColumns(j).Properties("Default")) = False Then strSQL = strSQL & " DEFAULT " & objColumns(j).Properties("Default") End If If objColumns(j).Properties("Jet OLEDB:Allow Zero Length") = False Then strSQL = strSQL & ",CONSTRAINT " & checkName(objTables(i).Name & "_" & objColumns(j).Name) & " CHECK (" & checkName(objColumns(j).Name) & " <> """")" End If Case Else strSQL = strSQL & " <blockquote><b style=""color:red"">" & objColumns(j).Type & " !!!!!!!!!!!!!!!!!!!!!![/b] " For Each objProperty In objColumns(j).Properties strSQL = strSQL & objProperty.Name & " = " & objProperty.Value & " " Next strSQL = strSQL & " </blockquote>" End Select If j < objColumns.Count - 1 Then strSQL = strSQL & "," End If Next strSQL = strSQL & ");" Set objColumns = Nothing Response.Write("<nobr>" & strSQL & "</nobr> ") End If Next Response.Write("</div>") Set objTables = Nothing End If If Request.Form("Indexes") <> "" Then ' Get tables list Set rsTables = objConn.OpenSchema(20) ' adSchemaTables ' Get indexes list Set rsIndexes = objConn.OpenSchema(12) ' adSchemaIndexes ' Get foreign keys list Set rsKeys = objConn.OpenSchema(27) ' adSchemaForeignKeys Response.Write("<h1>Indexes</h1>") Response.Write("<div>") ' Indexes While rsIndexes.EOF = False rsTables.Filter = "TABLE_NAME LIKE '" & rsIndexes("TABLE_NAME") & "' AND TABLE_TYPE='TABLE'" ' Check for user table rsKeys.Filter = "FK_NAME LIKE '" & rsIndexes("INDEX_NAME") & "'" ' Check for foreign key If rsTables.EOF = False Then If rsKeys.EOF = True Then If rsIndexes("PRIMARY_KEY") = True Then strIndex = "ALTER TABLE " & checkName(rsIndexes("TABLE_NAME")) & " ADD CONSTRAINT " & checkName(rsIndexes("INDEX_NAME")) & " PRIMARY KEY (" & checkName(rsIndexes("COLUMN_NAME")) & ");" ElseIf rsIndexes("UNIQUE") = True Then strIndex = "CREATE UNIQUE INDEX " & checkName(rsIndexes("INDEX_NAME")) & " ON " & checkName(rsIndexes("TABLE_NAME")) & " (" & checkName(rsIndexes("COLUMN_NAME")) & ");" Else strIndex = "CREATE INDEX " & checkName(rsIndexes("INDEX_NAME")) & " ON " & checkName(rsIndexes("TABLE_NAME")) & " (" & checkName(rsIndexes("COLUMN_NAME")) & ");" End If Response.Write("<nobr>" & strIndex & "</nobr> ") End If End If rsIndexes.MoveNext WEnd Response.Write("</div>") rsKeys.Close Set rsKeys = Nothing rsIndexes.Close Set rsIndexes = Nothing rsTables.Close Set rsTables = Nothing End If If Request.Form("ForeignKeys") <> "" Then ' Get tables list Set rsTables = objConn.OpenSchema(20) ' adSchemaTables ' Get indexes list Set rsIndexes = objConn.OpenSchema(12) ' adSchemaIndexes ' Get foreign keys list Set rsKeys = objConn.OpenSchema(27) ' adSchemaForeignKeys Response.Write("<h1>Foreign Keys</h1>") Response.Write("<div>") ' Foreign Keys While rsKeys.EOF = False rsTables.Filter = "TABLE_NAME LIKE '" & rsKeys("PK_TABLE_NAME") & "' AND TABLE_TYPE='TABLE'" ' Check for user table If rsTables.EOF = False Then strKey = "ALTER TABLE " & checkName(rsKeys("FK_TABLE_NAME")) & " ADD CONSTRAINT " & checkName(rsKeys("FK_NAME")) & " FOREIGN KEY (" & checkName(rsKeys("FK_COLUMN_NAME")) & ") REFERENCES " & checkName(rsKeys("PK_TABLE_NAME")) & " (" & checkName(rsKeys("PK_COLUMN_NAME")) & ")" If rsKeys("UPDATE_RULE") = "CASCADE" Then strKey = strKey & " ON UPDATE CASCADE" End If If rsKeys("DELETE_RULE") = "CASCADE" Then strKey = strKey & " ON DELETE CASCADE" End If strKey = strKey & ";" Response.Write("<nobr>" & strKey & "</nobr> ") End If rsKeys.MoveNext WEnd Response.Write("</div>") rsKeys.Close Set rsKeys = Nothing rsIndexes.Close Set rsIndexes = Nothing rsTables.Close Set rsTables = Nothing End If If Request.Form("Data") <> "" Then ' Get tables list Set rsTables = objConn.OpenSchema(20) ' adSchemaTables Response.Write("<h1>Data</h1>") Response.Write("<div>") ' Data While rsTables.EOF = False If rsTables("TABLE_TYPE") = "TABLE" Then ' Get table Set rsTable = objConn.Execute("SELECT * FROM " & CheckName(rsTables("TABLE_NAME"))) ' Build SQL strSQL1 = "INSERT INTO " & CheckName(rsTables("TABLE_NAME")) & " (" For j = 0 To rsTable.Fields.Count - 2 strSQL1 = strSQL1 & CheckName(rsTable.Fields(j).Name) & "," Next strSQL1 = strSQL1 & CheckName(rsTable.Fields(j).Name) strSQL1 = strSQL1 & ") VALUES (" strSQL2 = ")" ' Inserts While rsTable.EOF = False ' Values strValues = "" For j = 0 To rsTable.Fields.Count - 1 Select Case rsTable.Fields(j).Type Case adBoolean strValues = strValues & CLng(rsTable.Fields(j)) Case Else If Request.Form("Escape") = "" Then strValues = strValues & "'" & Replace("" & rsTable.Fields(j), "'", "''") & "'" Else strValues = strValues & "'" & Escape(Replace("" & rsTable.Fields(j), "'", "''")) & "'" End If End Select If j < rsTable.Fields.Count - 1 Then strValues = strValues & "," End If Next Response.Write("<nobr>" & strSQL1 & strValues & strSQL2 & "</nobr> ") rsTable.MoveNext WEnd rsTable.Close Set rsTable = Nothing End If rsTables.MoveNext WEnd Response.Write("</div>") rsTables.Close Set rsTables = Nothing End If objConn.Close Set objConn = Nothing Set objDB.ActiveConnection = Nothing Set objDB = Nothing End If

Rispondi quotando