none
Script para incluir campo nas tabelas RRS feed

  • Pergunta

  • Olá pessoal,

    eu gerei o banco de dados no cliente agora esses dias. Porém, fiz algumas alterações no meu banco local (o mesmo que do cliente) incluindo novos campos, chaves primárias e estrangeiras.

    No SQL Server 2008 existe alguma opção para gerar script (alter table add column..) de inserção desses campos e chaves primárias/estrangeiras? Eu sei que dá pra fazer isso manual, mas como direto tem alterações seria melhor se tivesse algo mais automatizado.

    Obrigado.


    quarta-feira, 25 de junho de 2014 22:26

Respostas

Todas as Respostas

  • Deleted
    quarta-feira, 25 de junho de 2014 23:04
  • José, eu uso a versão SQL Server 2008 R2.

    quarta-feira, 25 de junho de 2014 23:13
  • Deleted
    quarta-feira, 25 de junho de 2014 23:24
  • Beleza José, vou verificar essas e depois darei o retorno.

    Obrigado por enquanto.

    quarta-feira, 25 de junho de 2014 23:44
  • Boa tarde José,

    eu utilizei o SQL Admin Studio e funcionou perfeitamente. Fiz vários testes com criação de nova tabela, novo campo, chave primária, chave estrangeira e ficou 100%. Era bem isso que eu precisava.

    Agora eu só fiquei com um receio (medo que a tabela fosse alterada incorretamente ou excluir informação do banco) porque para qualquer alteração que ele vai fazer no banco é utilizado um script grande cheio de códigos. Eu pensei que para criar só uma chave estrangeira, por exemplo, ele fosse fazer ALTER TABLE TABELA ADD CONSTRAINT FK_NNN FOREIGN KEY... que é o modo padrão, mas ele usa todo esse código abaixo:

    USE [Teste]
    GO
    BEGIN TRANSACTION
    GO
    SET QUOTED_IDENTIFIER OFF
    GO
    SET ANSI_NULLS OFF
    GO
    CREATE TABLE [dbo].[TESTEAUX_80793D40] (
    [CD_TESTEAUX] int NOT NULL,
    [CD_TESTE] int NOT NULL,
    [DS_TESTEAUX] varchar(50) NOT NULL
    )
    GO
    ALTER TABLE [dbo].[TESTEAUX_80793D40] ADD CONSTRAINT [tmp_PK_TESTEAUX] PRIMARY KEY CLUSTERED ([CD_TESTEAUX] ASC)
    GO
    INSERT INTO [dbo].[TESTEAUX_80793D40] ([CD_TESTEAUX] , [CD_TESTE] , [DS_TESTEAUX] )
    SELECT [CD_TESTEAUX] , [CD_TESTE] , [DS_TESTEAUX] FROM [dbo].[TESTEAUX]
    GO
    IF EXISTS (SELECT * FROM sysobjects WHERE id = object_id(N'[dbo].[TESTEAUX]') AND OBJECTPROPERTY(id, N'IsUserTable') = 1)
    DROP TABLE [dbo].[TESTEAUX]
    GO
    sp_rename 'dbo.TESTEAUX_80793D40', 'TESTEAUX', 'OBJECT'
    GO
    sp_rename 'dbo.tmp_PK_TESTEAUX', 'PK_TESTEAUX', 'OBJECT'
    GO
    IF NOT EXISTS (SELECT * FROM sysobjects WHERE id = object_id(N'[FK_TESTEAUX_TESTE]') AND OBJECTPROPERTY(id, N'IsForeignKey') = 1)
    ALTER TABLE [dbo].[TESTEAUX] ADD CONSTRAINT [FK_TESTEAUX_TESTE] FOREIGN KEY ([CD_TESTE]) REFERENCES [dbo].[TESTE] ([CD_TESTE]) 
    GO
    IF ( @@TRANCOUNT > 0 ) COMMIT TRANSACTION
    GO

    Dá pra confiar 100% que não vai dar zica né? Eu falo isso porque atualizar no cliente não pode dar erro, muito menos perder os dados.


    sexta-feira, 27 de junho de 2014 18:17
  • Deleted
    terça-feira, 8 de julho de 2014 12:41
  • Bom dia José,

    eu fiz mais um teste com inclusão de mais um campo e deu pra comprovar que o software sempre usa esse mesmo script. Por enquanto não foram perdidos os dados que existiam na tabela alterada.

    Só que não consegui entender ainda como esse script funciona... kkkkk.. porque ele usa o create table, não usa alter table, consegue incluir os novos campos e não perde os dados da tabela (pelo menos nos testes até agora).

    quarta-feira, 16 de julho de 2014 11:56