Se stai usando .NET, è possibile utilizzare Server Management Objects:
var so = new ScriptingOptions();
so.Triggers = true;
so.DriForeignKeys = true;
so.DriDefaults = true;
so.DriAllConstraints = true;
so.DriAllKeys = true;
so.DriIndexes = true;
so.DriUniqueKeys = true;
so.DriPrimaryKey = true;
so.Indexes = true;
so.Default = true;
so.ClusteredIndexes = true;
so.IncludeDatabaseContext = true;
so.TargetServerVersion = SqlServerVersion.Version90;
var server = new Server("ServerName");
var db = server.Databases["DatabaseName"];
var stringColl = db.Tables["Table"].Script(so);
avresti bisogno di sostituire i nomi della tabella e gli oggetti associati (ad esempio FK_OldTableName_xxx con FK_NewTableName_xxx) nello script generato:
var sb = new StringBuilder();
foreach(var s in stringColl)
{
var r = s.Replace("OldTableName", "NewTableName");
sb.AppendLine(r);
}
E poi eseguire:
db.Execute(sb.ToString());
Si noti che questo è un codice piuttosto ingenuo: funzionerà solo se i nomi dei propri vincoli e chiavi seguono il formato: FK_OldTableName_xxx/CK_OldTableName_xxx .. se hanno altri nomi, sarà necessario rinforzare il codice di sostituzione della stringa , probabilmente usando Regexes per cercare modelli di creazione di oggetti T-SQL (es CREA INDICE, CHIAVE ESTERA .. ecc.).
fonte
2009-07-31 20:40:42
Quale lingua/piattaforma? C#? – MusiGenesis
C# e ASP.NET, ma questo non importa molto. Sto più cercando l'SQL che avrei bisogno di eseguire. –
Non sto seguendo abbastanza. L'SQL che dovresti eseguire è lo script CREATE TABLE con il nome della tabella modificato, come discusso nelle risposte. È necessario sapere come generare in modo programmatico questo script da SQL Server (cambiare il nome della tabella una volta che ciò non è troppo difficile), per cui la lingua è rilevante. Non conosco la risposta a questo, e sono interessato a vedere come questo può essere fatto. – MusiGenesis