Você pode criar um script de uma tabela relativamente fácil usando a interface do usuário, é claro:
Isso produzirá um CREATE TABLE
script e você só precisará procurar e substituir o nome antigo pelo novo nome (e verificar se um objeto com o novo nome ainda não existe).
Mas se você está tentando automatizar isso (por exemplo, gerar o script create table no código), é um pouco mais complicado. A opção de script acima não apenas extrai o CREATE TABLE
DDL inteiro de um único local nos metadados; ele faz um monte de mágica nos bastidores do código para gerar o CREATE TABLE
script final (você pode usar o Profiler para ver de onde ele obtém seus dados, mas não consegue ver como ele os reúne). Sugeri uma opção para isso:
http://connect.microsoft.com/SQLServer/feedback/details/273934
No entanto, isso foi recebido com muito poucos votos e foi rapidamente derrubado pela Microsoft. Talvez você ache muito mais interessante usar uma ferramenta de terceiros para gerar esquema ( escrevi sobre isso em blog ).
No SQL Server 2012, há novas funções de metadados que permitem que você se aproxime muito mais do que o trabalho que você precisa fazer em 2005, 2008 e 2008 R2, reunindo informações da coluna dos metadados (que tem muitas ressalvas, por exemplo, se for decimal, você precisa adicionar a precisão / escala, se [n [var [char]] precisar adicionar a especificação de comprimento, se n [var] char, você precisar cortar o max_length ao meio, se for um MAX, será necessário mude -1 para MAX, etc etc). No SQL Server 2012, essa parte é um pouco mais fácil:
SELECT name, system_type_name, is_nullable FROM
sys.dm_exec_describe_first_result_set('select * from sys.objects', NULL, 0)
Resultados:
name system_type_name is_nullable
-------------------- ---------------- -----------
name nvarchar(128) 0
object_id int 0
principal_id int 1
schema_id int 0
parent_object_id int 0
type char(2) 0
type_desc nvarchar(60) 1
create_date datetime 0
modify_date datetime 0
is_ms_shipped bit 0
is_published bit 0
is_schema_published bit 0
Eu escrevi sobre isso também.
Indiscutivelmente, isso está muito mais próximo da sua CREATE TABLE
declaração direcionada do que uma abordagem complicada sys.columns
, mas ainda há muito trabalho a ser feito. Chaves, restrições, opções de texto nas linhas, informações do grupo de arquivos, configurações de compactação, índices, etc. analogia usada, reinventando a roda.
Dito isso, se você precisar fazer isso através do código, mas puder fazê-lo fora do SQL Server, poderá considerar o SMO / PowerShell. Veja esta dica e o método Scripter.Script () .
Eu escrevi este sp para criar automaticamente o esquema com todas as coisas, pk, fk, partições, restrições ...
IMPORTANTE!! antes do exec
aqui o SP:
para executá-lo:
fonte
Pode estar usando uma britadeira para pregar uma parede, mas, dada a amplitude da pergunta, acho que é uma opção válida a ser mencionada.
Se você estiver usando o SQL Server 2012 SP4 +, 2014 SP2 + ou 2016 SP1 +, poderá aproveitar
DBCC CLONEDATABASE
para criar uma cópia somente de esquema dos dados sem sans do banco de dados. Isso é ideal para gerar cópias de esquema abrangentes de várias tabelas e pode aliviar a necessidade de "automatizar" o processo de loop através de uma série de tabelas, mas esteja avisado de que todas as cópias de tabela serão criadas dentro de um novo banco de dados somente leitura .Estas tabelas irá incluir chaves estrangeiras, chaves primárias, índices e restrições. Eles também incluem estatísticas e dados do armazenamento de consultas (a menos que você especifique
NO_STATISTICS
eNO_QUERYSTORE
).A sintaxe é
Há também algumas outras ressalvas a serem observadas, sobre as quais Brent Ozar tem um ótimo post , mas tudo se resume a como e por que você deseja criar cópias de tabelas para saber se alguma das sutilezas é uma quebra de negócio ou não. .
fonte
Você pode usar o comando "Gerar script" no SQL Server Management Studio para obter um script que pode criar sua tabela, incluindo índices, gatilhos, chaves estrangeiras, etc.
No SSMS
Você pode editar para incluir exatamente o que precisa no banco de dados de destino.
fonte
Aqui está uma versão baseada na de E.Mantovanelli neste tópico. Isso corrige um problema em que um índice exclusivo não incluía a palavra-chave UNIQUE no script resultante. Ele também adiciona parâmetros para que uma tabela possa ser criada sem índices não agrupados em cluster ou você pode criar scripts apenas dos índices não agrupados em cluster. Eu uso isso para criar uma tabela de estágio, carregá-lo, adicionar índices não clusterizados e, em seguida, fazer uma troca de tabela, que permite que a carga seja executada mais rapidamente e que os índices não sejam fragmentados.
fonte
Você pode usar esse script para copiar uma estrutura de tabela com chaves estrangeiras, mas sem índices. Esse script lida com tipos definidos pelo usuário e colunas computadas normalmente.
Se você estiver interessado, também pode encontrá-lo no meu blog: http://www.hansmichiels.com/2016/02/18/how-to-copy-a-database-table-structure-t-sql-scripting-series -s01e01 /
fonte
fonte