Script para gerar um “Create Table” de uma tabela existente no SQL Server

Olá pessoal…

Hoje vou mostrar como gerar um Create Table completo de uma tabela no SQL Server utilizando uma procedure.

SQL Server

SQL Server

A procedure desenvolvida é:

--Exclui procedure
IF OBJECT_ID('dbo.scriptCreate', 'P') IS NOT NULL
    DROP PROCEDURE [dbo].[scriptCreate]
GO

--Recria a procedure
CREATE PROCEDURE scriptCreate(
	@Tabela Varchar(200)
)
AS
	--Desabilitando a saída "(x row(s) affected)"
	SET NOCOUNT ON

	--Criando a tabela que irá  contar as linhas do create table
	DECLARE @Create_Table TABLE(s VARCHAR(1000), id INT IDENTITY)

	--Criação Inicial
	INSERT INTO  @Create_Table(s) VALUES ('CREATE TABLE ' + @Tabela + ' (')

	--Colunas do Create
	INSERT INTO @Create_Table(s)
	SELECT
		'['+column_name+'] ' + 
		data_type + 
		CASE WHEN RTrim(data_type) = 'image' THEN ''
		ELSE coalesce('('+cast(character_maximum_length AS VARCHAR)+')','') END + 
		' ' +
		CASE WHEN EXISTS ( 
			SELECT id FROM syscolumns
			WHERE object_name(id)=@Tabela
			AND name=column_name
			AND columnproperty(id,name,'IsIdentity') = 1 
		) THEN
			'IDENTITY(' + 
			cast(ident_seed(@Tabela) AS VARCHAR) + ',' + 
			cast(ident_incr(@Tabela) AS VARCHAR) + ')'
		ELSE ''
		END + ' ' +
		( CASE WHEN IS_NULLABLE = 'No' OR RTrim(column_name) = 'R_E_C_N_O_' THEN 'NOT ' ELSE '' END ) + 'NULL ' + 
		coalesce('DEFAULT '+COLUMN_DEFAULT,'') + ','

	FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = @Tabela
	ORDER BY ordinal_position

	--Agora pega a primary key da tabela
	DECLARE @PKName varchar(100)
	SELECT @PKName = constraint_name FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS
	WHERE table_name = @Tabela AND constraint_type='PRIMARY KEY'

	--Se tiver indice
	IF ( @PKName is not null ) BEGIN
		INSERT INTO @Create_Table(s) values('  PRIMARY KEY (')
		INSERT INTO @Create_Table(s)
			SELECT '   ['+COLUMN_NAME+'],' FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
			WHERE constraint_name = @PKName
			ORDER BY ordinal_position

		--Remove a última vírgula
		UPDATE @Create_Table SET s=left(s,len(s)-1) WHERE id=@@identity
		INSERT INTO @Create_Table(s) VALUES (' )')
	END
	--Senão, remove a ultima vírgula
	ELSE BEGIN
		UPDATE @Create_Table set s=left(s,len(s)-1) WHERE id=@@identity
	END

	--Fechando o último parêntestes
	INSERT INTO @Create_Table(s) values( ')' )

	--Agora seleciona os dados
	SELECT * FROM @Create_Table

Para executar, basta chamar a procedure e a tabela que você deseja, por exemplo:

exec scriptCreate 'SB1990'

Abaixo um print do resultado da execução.

Script para gerar Create Table

Script para gerar Create Table

Referências:
Stack Overflow

Bom pessoal, por hoje é só.
Abraços e até a próxima.

Dan Atilio (Daniel Atilio)
Especialista em Engenharia de Software pela FIB. Entusiasta de soluções Open Source. E blogueiro nas horas vagas.

4 Responses

  1. maria do carmo disse:

    Boa tarde. Gostaria de saber se você pode me ajudar a desenvolver (resolver) este projeto? Preciso dele pra hoje, pois amanhã irei apresenta-lo.

    Descrição do Trabalho Final
    (Projeto de Banco de Dados de uma PARÓQUIA)

    Os alunos deverão desenvolver um Projeto de Banco de Dados Completo. O trabalho deverá ser feito com a ferramenta SQLite (para os scripts SQL) e brModelo (para o DER). O projeto será realizado em duplas (obs: os dois alunos devem postar o mesmo documento individualmente). A entrega do trabalho corresponderá a um documento PDF dividido em 4 partes:

    1. Um diagrama Entidade-Relacionamento
    2. Um script SQL de criação das tabelas
    3. Um script SQL de povoamento das tabelas (no mínimo 5 linhas para cada tabela). Aqui você irá preencher as tabelas com dados fictícios, usando INSERT/UPDATE
    4. Um script SQL com 5 consultas de busca que envolvem mais de uma tabela (operação de join)

    A Descrição do minimundo segue abaixo:

    1. Descrição do mundo real a ser modelado pela aplicação
    Uma casa paroquial (secretaria de igreja) é definida por ser um local que tem como objetivo ajudar na organização de uma igreja, marcando cerimônias (batizados, casamentos etc) e organizando contas e aspectos organizacionais da paróquia.

    Dentro deste ambiente há dois personagens principais: os fiéis e os funcionários. O fiel solicitará a marcação de alguma cerimônia ou evento por funcionários, direta ou indiretamente, de acordo com a sua função (padre, assessor ou auxiliar de padre). A partícula (i.e. depois de consagrada, a hóstia) é fornecida à casa paroquial por um fornecedor. Também há o dízimo que é pago pelos fieis.

    2. Descrição dos objetivos da aplicação
    De acordo com o panorama das casas paroquiais, observamos que é possível melhorar a forma de gerenciar as marcações de cerimônias, fiéis e funcionários da igreja de maneira fácil e intuitiva. De forma geral, a aplicação registrará os fiéis e gerenciará as marcações de cerimônias, bem como o recebimento das partículas do(s) fornecedore(s) e o pagamento do dízimo pelos fiéis.

    3. Descrição informal dos dados (entidades, relacionamento, atributos, etc.) observados
    Uma Casa Paroquial (Secretaria de Igreja) é composta por PESSOAS, que possuem: nome, CPF, sexo, data de nascimento, telefone(s) e endereço (logradouro, cidade, estado e CEP). Uma PESSOA pode ser um FIEL ou um FUNCIONÁRIO. FIÉIS possuem um diaIngresso, atributo que indica quando o FIEL se cadastrou na Casa Paroquial e uma matrícula. FUNCIONÁRIOS possuem uma data de admissão, e uma matrícula. Dentro do quadro de funcionários existem três especializações: ASSESSOR, que possui uma função e um salário, PADRE, que possui uma validadeServiço e um AUXILIAR DE PADRE, que possui um padreResponsável. Uma CERIMÔNIA, que possui um celebrante, um id, um acessor responsável e uma data/hora. Também existe um CERIMÔNIA_FIÉIS que relaciona os fiéis com a cerimônia.

    Uma cerimônia pode ser agendada por um assessor para vários fiéis e vários fiéis podem agendar uma ou mais cerimônias através de um assessor. Um assessor coordena vários assessores e os assessores são coordenados por um assessor. Um padre convida um auxiliar de padre e um auxiliar de padre é convidado por um padre. Um padre celebra várias cerimônias assistidas por vários fiéis e as cerimônias são celebradas por no máximo um padre. Um auxiliar de padre pode auxiliar um padre em várias cerimônias e as cerimônias podem ser auxiliadas por vários auxiliares de padre. Um fiel paga o dízimo e o dízimo é pago por um fiel.

  2. Pedro Loewenberg Passalacqua disse:

    essa aí dançou hushuahuehuauhuhehuahuehua

  3. Henry disse:

    sério que ela queria que você respondesse a lição dela ? kkkkkkkkkkkkkkkkkkkkkk

Deixe uma resposta