Ich bin neu in SQL, und was ich tun musste, war 2 MDF-Datenbanken zu einem zu kombinieren. Ich habe das mit SQL Server 2008 Manager - Aufgaben> Import/Export-Tabellen. Die Tabellen und Ansichten wurden erfolgreich kopiert, aber es gibt keine gespeicherten Prozeduren in der neuen Datenbank. Gibt es eine Möglichkeit, das zu tun?SQL Server - Kopieren von gespeicherten Prozeduren von einer Datenbank in eine andere
Antwort
- Rechtsklick auf Datenbank
- Aufgaben
- generieren Skripte
- die Objekte auswählen, die Sie Skript wünschen
- Script to File
- Skripts ausführen, die gegen Zieldatenbank
Sie können die SSMS-Funktion "Generate Scripts ..." verwenden, um Scripts zu erstellen zu transferieren. Klicken Sie mit der rechten Maustaste auf die Quelldatenbank in SSMS, wählen Sie "Skripte generieren ..." und folgen Sie dem Assistenten. Führen Sie dann das resultierende Skript aus, das jetzt die create-Anweisungen für gespeicherte Prozeduren enthält.
Klicken Sie in Mgmt Studio mit der rechten Maustaste auf Ihre ursprüngliche Datenbank, dann auf Aufgaben und dann auf Skripts generieren ... - folgen Sie dem Assistenten.
Verwendung
select * from sys.procedures
alle Prozeduren zu zeigen;
sp_helptext @objname = 'Procedure_name'
den Code
und Ihre Kreativität, um etwas zu Schleife durch sie alle und erzeugen den Export Code :)
Sie scriptof die gespeicherte Prozedur des erzeugen kann zu bauen, wie in anderen Antworten dargestellt. Wenn das Skript generiert wurden, können Sie sqlcmd
verwenden sie gegen Ziel-DB auszuführen wie
sqlcmd -S <server name> -U <user name> -d <DB name> -i <script file> -o <output log file>
An einem späten aber mehr Details gibt, die nützlich sein könnten ...
Hier ist eine Liste der Dinge, die Sie mit tun Vor- und Nachteile
Skripte SSMS
-
mit Gene
- Pros: extrem einfach zu bedienen und standardmäßig unterstützt
- Nachteile: Skripts möglicherweise nicht in der richtigen Reihenfolge ausgeführt und Sie möglicherweise Fehler erhalten, wenn gespeicherte Prozedur bereits in sekundären Datenbank vorhanden ist. Stellen Sie sicher, dass Sie das Skript vor der Ausführung überprüfen.
Third-Party-Tools
- Vorteile: Tools wie ApexSQL Diff (das ist, was ich benutze, aber es gibt viele andere wie Werkzeuge von Red Gate oder Dev Art) vergleicht zwei Datenbanken in Ein Klick und generieren Skript, das Sie sofort ausführen können
- Nachteile: diese sind nicht frei (die meisten Anbieter haben eine voll funktionsfähige Studie obwohl)
Aussichten
- Vorteile: Sie einfach die gespeicherten Prozeduren existieren auf sekundären Server sehen können und nur erzeugen diejenigen, die Sie nicht haben.
- Nachteile: erfordert ein wenig mehr SQL-Kenntnisse
Hier ist, wie eine Liste aller Verfahren in irgendeiner Datenbank zu erhalten, die in einer anderen Datenbank
select *
from DB1.sys.procedures P
where P.name not in
(select name from DB2.sys.procedures P2)
SELECT Definition nicht existieren + char (13) + 'GO' VON MyDatabase.sys.sql_modules s INNERER JOIN MyDatabase.sys.procedures p ON [s]. [objekt_id] = [p]. [objekt_id] WHERE p.name LIKE 'Something%' "queryout "c: \ SP_scripts.sql -S MyInstance -T -t-
Holen Sie sich das SP und führen Sie es aus
Dieser Code kopiert alle gespeicherten Prozeduren in der Master-Datenbank in die Zieldatenbank, Sie können nur die Prozeduren kopieren, indem Sie die Abfrage nach Prozedurnamen filtern.
@sql als nvarchar (max) definiert ist, ist @Name die Zieldatenbank
DECLARE c CURSOR FOR
SELECT Definition
FROM [ResiDazeMaster].[sys].[procedures] p
INNER JOIN [ResiDazeMaster].sys.sql_modules m ON p.object_id = m.object_id
OPEN c
FETCH NEXT FROM c INTO @sql
WHILE @@FETCH_STATUS = 0
BEGIN
SET @sql = REPLACE(@sql,'''','''''')
SET @sql = 'USE [' + @Name + ']; EXEC(''' + @sql + ''')'
EXEC(@sql)
FETCH NEXT FROM c INTO @sql
END
CLOSE c
DEALLOCATE c
ich diesen Beitrag ursprünglich für eine Lösung Kopieren von gespeicherten Prozeduren von meiner entfernten Produktionsdatenbank zu meiner lokalen Entwicklung Datenbank Suche gefunden . Nach dem Erfolg des vorgeschlagenen Ansatzes in diesem Thread wurde mir klar, dass ich zunehmend faul (oder findig, was immer Sie bevorzugen) und wollte, dass dies automatisiert wird. Ich kam in this link, was sehr hilfreich erwiesen (danke vincpa), und ich verlängerte darauf, was in der folgenden Datei (schema_backup.ps1):
$server = "servername"
$database = "databaseName"
$output_path = "D:\prod_schema_backup"
$login = "username"
$password = "password"
$schema = "dbo"
$table_path = "$output_path\table\"
$storedProcs_path = "$output_path\stp\"
$views_path = "$output_path\view\"
$udfs_path = "$output_path\udf\"
$textCatalog_path = "$output_path\fulltextcat\"
$udtts_path = "$output_path\udtt\"
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.ConnectionInfo") | out-null
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SMO") | out-null
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SmoExtended") | out-null
$srvConn = new-object Microsoft.SqlServer.Management.Common.ServerConnection
$srvConn.ServerInstance = $server
$srvConn.LoginSecure = $false
$srvConn.Login = $login
$srvConn.Password = $password
$srv = New-Object Microsoft.SqlServer.Management.SMO.Server($srvConn)
$db = New-Object ("Microsoft.SqlServer.Management.SMO.Database")
$tbl = New-Object ("Microsoft.SqlServer.Management.SMO.Table")
$scripter = New-Object Microsoft.SqlServer.Management.SMO.Scripter($srvConn)
# Get the database and table objects
$db = $srv.Databases[$database]
$tbl = $db.tables | Where-object { $_.schema -eq $schema -and -not $_.IsSystemObject }
$storedProcs = $db.StoredProcedures | Where-object { $_.schema -eq $schema -and -not $_.IsSystemObject }
$views = $db.Views | Where-object { $_.schema -eq $schema }
$udfs = $db.UserDefinedFunctions | Where-object { $_.schema -eq $schema -and -not $_.IsSystemObject }
$catlog = $db.FullTextCatalogs
$udtts = $db.UserDefinedTableTypes | Where-object { $_.schema -eq $schema }
# Set scripter options to ensure only data is scripted
$scripter.Options.ScriptSchema = $true;
$scripter.Options.ScriptData = $false;
#Exclude GOs after every line
$scripter.Options.NoCommandTerminator = $false;
$scripter.Options.ToFileOnly = $true
$scripter.Options.AllowSystemObjects = $false
$scripter.Options.Permissions = $true
$scripter.Options.DriAllConstraints = $true
$scripter.Options.SchemaQualify = $true
$scripter.Options.AnsiFile = $true
$scripter.Options.SchemaQualifyForeignKeysReferences = $true
$scripter.Options.Indexes = $true
$scripter.Options.DriIndexes = $true
$scripter.Options.DriClustered = $true
$scripter.Options.DriNonClustered = $true
$scripter.Options.NonClusteredIndexes = $true
$scripter.Options.ClusteredIndexes = $true
$scripter.Options.FullTextIndexes = $true
$scripter.Options.EnforceScriptingOptions = $true
function CopyObjectsToFiles($objects, $outDir) {
#clear out before
Remove-Item $outDir* -Force -Recurse
if (-not (Test-Path $outDir)) {
[System.IO.Directory]::CreateDirectory($outDir)
}
foreach ($o in $objects) {
if ($o -ne $null) {
$schemaPrefix = ""
if ($o.Schema -ne $null -and $o.Schema -ne "") {
$schemaPrefix = $o.Schema + "."
}
#removed the next line so I can use the filename to drop the stored proc
#on the destination and recreate it
#$scripter.Options.FileName = $outDir + $schemaPrefix + $o.Name + ".sql"
$scripter.Options.FileName = $outDir + $schemaPrefix + $o.Name
Write-Host "Writing " $scripter.Options.FileName
$scripter.EnumScript($o)
}
}
}
# Output the scripts
CopyObjectsToFiles $tbl $table_path
CopyObjectsToFiles $storedProcs $storedProcs_path
CopyObjectsToFiles $views $views_path
CopyObjectsToFiles $catlog $textCatalog_path
CopyObjectsToFiles $udtts $udtts_path
CopyObjectsToFiles $udfs $udfs_path
Write-Host "Finished at" (Get-Date)
$srv.ConnectionContext.Disconnect()
ich eine .bat-Datei, die diese Anrufe und wird vom Taskplaner aufgerufen. Nach dem Aufruf der Datei Powershell, die ich habe:
for /f %f in ('dir /b d:\prod_schema_backup\stp\') do sqlcmd /S localhost /d dest_db /Q "DROP PROCEDURE %f"
Diese Linie durch das Verzeichnis gehen und die Verfahren legen Sie es neu erstellen wird. Wenn dies keine Entwicklungsumgebung wäre, möchte ich die Prozeduren nicht programmgesteuert auf diese Weise löschen. Ich benenne dann alle gespeicherten Prozedurdateien um.sql:
powershell Dir d:\prod_schema_backup\stp\ | Rename-Item -NewName { $_.name + ".sql" }
Und dann laufen:
for /f %f in ('dir /b d:\prod_schema_backup\stp\') do sqlcmd /S localhost /d dest_db /E /i "%f".sql
Und das wird für alle SQL-Dateien und stellt die gespeicherten Prozeduren. Ich hoffe, dass jeder Teil davon für jemanden hilfreich sein wird.
Ich mag dies. Ich habe einen Prozess für ar schreiben Stück für Stück Stück für Stück aus einer Produktionsdatenbank herauszuschneiden. Ich möchte nicht, dass SQL-Dateien hängen bleiben, die wahrscheinlich nicht aktualisiert werden, wenn das Schema entwickelt wird, also passe ich das an, um eine leere Datenbank basierend auf einem Ziel zu erstellen, ohne den Zwischenschritt des Schreibens von Dateien auf die Festplatte (mehr Aufräumen). Ich denke, das ist wahrscheinlich die beste und wiederverwendbarste Antwort auf diese Frage, Kudos, Sir! –
- 1. Daten von einer Datenbank in eine andere Datenbank kopieren
- 2. Importieren von vorhandenen gespeicherten Prozeduren in SQL Server
- 3. SQL Server Kopieren von Tabellen von einer Datenbank in eine andere
- 4. Wie precompile gespeicherten Prozeduren in SQL Server?
- 5. Analysieren aller gespeicherten Prozeduren in einer Datenbank
- 6. Abrufen einer gefilterten Liste von gespeicherten Prozeduren mit t-sql
- 7. Sichern einer SQL Server-Datenbank von der Festplatte mit gespeicherten Prozeduren?
- 8. Kreuz DB gespeicherten Prozeduren Leistung in SQL Server 2008
- 9. C# -Anwendung mit einer lokalen Datenbank mit gespeicherten Prozeduren
- 10. Zugriff auf Resultsets aus gespeicherten Prozeduren Transact-SQL SQL Server
- 11. Ausnahmemanagement in gespeicherten Prozeduren?
- 12. Textsuche in gespeicherten Prozeduren in SQL Server 2005
- 13. Kopieren der gesamten Datenbank in eine andere Server-Datenbank
- 14. Welche gespeicherten Prozeduren sind in SQL Server Compact Edition verfügbar?
- 15. dynamisch aktualisieren mit gespeicherten Prozeduren in SQL Server
- 16. Django: Daten von einer Datenbank in eine andere kopieren
- 17. Mysql Daten von einer Datenbank in eine andere kopieren WHERE
- 18. Welchen Einzugsstil verwenden Sie in SQL Server gespeicherten Prozeduren?
- 19. Throwing Exceptions in gespeicherten SQL-CLR-Prozeduren
- 20. Hat jemand Erfolg beim Testen von gespeicherten SQL-Prozeduren gehabt?
- 21. Verschieben einer Tabelle von einer Datenbank in eine andere Datenbank SQL Server
- 22. So kopieren Sie Ansichten von einer Datenbank in eine andere Datenbank
- 23. Wie Debuggen von gespeicherten Prozeduren in Visual Studio aktivieren?
- 24. Kopieren von einer Datenbanktabelle in eine andere C#
- 25. Metaprogrammierung mit gespeicherten Prozeduren?
- 26. SQL Server - Suche durch gespeicherte Prozeduren?
- 27. Kann ich eine SQL Server-Datenbank innerhalb einer gespeicherten SQL Server-Prozedur aktualisieren?
- 28. Aufruf von DocumentDb gespeicherten Prozeduren von .net
- 29. Wie Abrufen von Namen gespeicherter Prozeduren in SQL Server?
- 30. Unterschied zwischen gespeicherten Prozeduren und erweiterten gespeicherten Prozeduren
Wenn Sie sie programmgesteuert kopieren möchten, starten Sie hier: http://StackOverflow.com/a/6124487/138938 –