Pergunta

Eu preciso copiar uma tabela que eu já tenho em um banco de dados do servidor SQL, mas eu não preciso dos dados contidos na tabela de origem. Os exemplos Eu só encontrei envolvem copiar os dados.

Aqui estão os detalhes:

  1. Copiar a estrutura da tabela apenas, não o de dados.
  2. Fonte e tabelas de destino estão no mesmo banco de dados.
  3. tabela de destino ainda não existe.
  4. necessidade de fazer isso programaticamente
  5. Seria bom ter todas as propriedades relacionadas de mesa / colunas ser copiados também.
Foi útil?

Solução

* seleccionar em new_table de tabela_antiga em que 1 = 0

Executar o comando acima programação.

Outras dicas

Script para fora da mesa, mudar o nome da tabela no script, execute o script.

Eu aposto com SMO você pode fazer isso sem problema:

  • ler a estrutura de sua mesa "velho" em variáveis ??na memória
  • usar essa estrutura de informação para criar a nova tabela

Eu rapidamente encontrei alguns artigos interessantes que mostram pelo menos parte da solução:

Então, basicamente seria resumem-se a algo como isto:

Server localServer = new Server("(local)");
Database testDB = localServer.Databases["test"];

Table myTable = testDB.Tables["TestFiles"];
myTable.Refresh();

Table newTable = new Table(testDB, "MyNewTableName");

foreach(Column col in myTable.Columns)
{
    Column newColumn = new Column(newTable, col.Name);

    newColumn.DataType = col.DataType;
    newColumn.Default = col.Default;
    newColumn.Identity = col.Identity;
    newColumn.IdentityIncrement = col.IdentityIncrement;
    newColumn.IdentitySeed = col.IdentitySeed;
    newColumn.Nullable = col.Nullable;

    newTable.Columns.Add(newColumn);
}

newTable.Create();

É claro, existem mais propriedades na "Coluna", que você pode querer copiar, e você também pode querer copiar índices, restrições etc. -. Trabalho extra

Estou perplexo que não há uma maneira mais fácil para duplicar um objeto "Coluna" para um novo (algo como um método .Clone ()) para aliviar essa - talvez não seja um cenário de alta prioridade, I não sei ....

Espero que isso ajude!

Marc

No SQL Server Management Studio, clique direito sobre o nome da tabela e Tabela Script como | Criar para ... | Nova consulta editor Window. Isso lhe dará um script que pode ser executado em qualquer banco de dados.

Se você estiver usando NET, você pode usar Management Server objetos:

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);

Você precisaria para substituir os nomes da tabela e objetos associados (por exemplo FK_OldTableName_xxx com FK_NewTableName_xxx) no script gerado:

var sb = new StringBuilder();
foreach(var s in stringColl)
{
    var r = s.Replace("OldTableName", "NewTableName");
    sb.AppendLine(r);
}

E, em seguida, execute:

db.Execute(sb.ToString());

Note que este código é muito ingênuo: ele só irá funcionar se os nomes de suas restrições e chaves seguir o formato: FK_OldTableName_xxx / CK_OldTableName_xxx .. se eles têm outros nomes, você precisa para reforçar o código de substituição de string, provavelmente usando Regexes para procurar padrões de criação de objetos T-SQL (ou seja, CREATE INDEX, FOREIGN KEY .. etc).

Você precisa fazer isso automaticamente (sem interferência manual)?

Caso contrário, você sempre pode usar o SQL Server Management Studio para gerar criar scripts para as tabelas que você deseja copiar e executá-lo no banco de dados de destino.

Botão direito do mouse sobre o objeto que você deseja, escolha gerar script e escolher o seu script para gerar.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top