Ir para conteúdo
Fórum Script Brasil
  • 0

Como Altera Ordem Campo em Tabela Criada no Sql Server 2000


Guest Cleirton

Pergunta

Pessoal,

como faço para Altera Ordem de Campo em Tabela Criada no Sql Server 2000? Via Script SQL.

Alguém poderia mim ajudar? já procurei uma diversidade de script mas não consigo encontrar-lo.

Grato.

Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0

é quando tentei fazer isso certa vez tb não consegui. no mysql sei q da pra fazer facil no alter table, mas no sql parece q não da.

mas tipo, o q acontece é q na hora do select você escolhe a ordem dos campos, então isso não afeta mta coisa. e você sempre pode abrir o design no manager e mudar na mao.

mas seila, ainda acho q devia te um jeito por query, se eu descobrir posto aqui.

Link para o comentário
Compartilhar em outros sites

  • 0

Kuroi, beleza

Pois he, sei que pelo EnterpriseManager dá pra fazer facim, assim como, sei que posso montar a estrutura de Select conforme quero que os campos aparecam.

No entanto, trabalho em uma grande instituição financeira no qual possui em torno de 330 servidores distribuidos e infelizmente em alguns database de alguns servidores alguém criou a Tabela com a ordem dos campos errados causando impactos em algum processos nossos.

Quando quero fazer uma manutenção em uma trigger por exemplo, tenho que verificar qual servidor esta errado a estrutura da tabela com os demais, dessa forma fica um trabalho ardou.

Então, preciso de um script para ser executado em todos os database dos servidor existentes para que as ordens dos campo fiquem Iguais, assim, facilitando os trabalhos posteriores.

Link para o comentário
Compartilhar em outros sites

  • 0

Boa tarde,

Estive pesquisando sobre o assunto e descobri que a mudança de informações no catálogo, a partir do SQL2005 não está mais acessível de forma tão fácil como antes.

Vale a pena dar uma olhada nos links abaixo:

http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=105032

http://www.mssqltips.com/tip.asp?tip=1274

ms-help://MS.SQLCC.v9/MS.SQLSVR.v9.en/udb9/html/993e0820-17f2-4c43-880c-d38290bf7abc.htm

Recomendo também pesquisar no Google da seguinte forma:

  • SQL SERVER 2005 "Ad hoc updates to system catalogs are not allowed" ERROR

SQL SERVER "Msg 259" CHANGE COLUMNS ORDER ERROR

Logo abaixo está a opinião de um colega DBA sobre o assunto e a seguir um exemplo de código para implementar isso de outra maneira, a criação de uma tabela temporária, a transferência dos valores e a recriação da tabela original.

Palavra de DBA:

  • No SQL Server 2005 (teoricamente) não é permitida a atualização do catálogo, ou

seja, diferente de outras versões que era possível atualizar o dicionário de dados

bastando configurar o servidor para tal.

Você notou que os valores do campo identity são armazenados no dicionário.

Desta forma, existe uma maneira para atualizar o catálogo iniciando o SQL Server no

modo single-user. Antes de realizar a operação deve-se realizar o backup dos bancos,

principalmente do master.

Verifique no books online tratamentos para colunas identity tipo "SET

IDENTITY_INSERT"... ou algo parecido. Geralmente colunas identity são ou fazem parte

de chave única e, por isso, acredita-se não sofrer alterações embora, como sabe,

muitas vezes é preciso atualizar estes valores.

Se eu tiver outra sugestão lhe informo.

/* To prevent any potential data loss issues, you should review this script in detail before running it outside the context of the database designer.*/

BEGIN TRANSACTION

SET QUOTED_IDENTIFIER ON

SET ARITHABORT ON

SET NUMERIC_ROUNDABORT OFF

SET CONCAT_NULL_YIELDS_NULL ON

SET ANSI_NULLS ON

SET ANSI_PADDING ON

SET ANSI_WARNINGS ON

COMMIT

BEGIN TRANSACTION

GO

CREATE TABLE dbo.Tmp_EXTERNA2

(

COD int NOT NULL IDENTITY (1, 1),

USERNAME varchar(20) NULL,

LASTUPDATE datetime NULL

) ON [PRIMARY]GO

SET IDENTITY_INSERT dbo.Tmp_EXTERNA2 ON

GO

IF EXISTS(SELECT * FROM dbo.EXTERNA2)

EXEC('INSERT INTO dbo.Tmp_EXTERNA2 (COD, LASTUPDATE, USERNAME)

SELECT COD, LASTUPDATE, USERNAME FROM dbo.EXTERNA2 WITH (HOLDLOCK TABLOCKX)')

GO

SET IDENTITY_INSERT dbo.Tmp_EXTERNA2 OFF

GO

DROP TABLE dbo.EXTERNA2

GO

EXECUTE sp_rename N'dbo.Tmp_EXTERNA2', N'EXTERNA2', 'OBJECT'

GO

COMMIT

Bom, senão ajudei em muita coisa, espero ao menos não ter atrapalhado. :)

Link para o comentário
Compartilhar em outros sites

  • 0

Obrigado, Jefferson

Mas como informei, estou usando sql sever 2000 e não o 2005

De qualauer forma obrigado pelas digas.

Irei fazer da forma mais dificel mesmo, copiar os dados para uma tabela Temporia - recriar a tabela depois importar os dados novamente.

obrigado a todos.

Boa tarde,

Estive pesquisando sobre o assunto e descobri que a mudança de informações no catálogo, a partir do SQL2005 não está mais acessível de forma tão fácil como antes.

Vale a pena dar uma olhada nos links abaixo:

http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=105032

http://www.mssqltips.com/tip.asp?tip=1274

ms-help://MS.SQLCC.v9/MS.SQLSVR.v9.en/udb9/html/993e0820-17f2-4c43-880c-d38290bf7abc.htm

Recomendo também pesquisar no Google da seguinte forma:
  • SQL SERVER 2005 "Ad hoc updates to system catalogs are not allowed" ERROR

SQL SERVER "Msg 259" CHANGE COLUMNS ORDER ERROR

Logo abaixo está a opinião de um colega DBA sobre o assunto e a seguir um exemplo de código para implementar isso de outra maneira, a criação de uma tabela temporária, a transferência dos valores e a recriação da tabela original.

Palavra de DBA:

  • No SQL Server 2005 (teoricamente) não é permitida a atualização do catálogo, ou

seja, diferente de outras versões que era possível atualizar o dicionário de dados

bastando configurar o servidor para tal.

Você notou que os valores do campo identity são armazenados no dicionário.

Desta forma, existe uma maneira para atualizar o catálogo iniciando o SQL Server no

modo single-user. Antes de realizar a operação deve-se realizar o backup dos bancos,

principalmente do master.

Verifique no books online tratamentos para colunas identity tipo "SET

IDENTITY_INSERT"... ou algo parecido. Geralmente colunas identity são ou fazem parte

de chave única e, por isso, acredita-se não sofrer alterações embora, como sabe,

muitas vezes é preciso atualizar estes valores.

Se eu tiver outra sugestão lhe informo.

/* To prevent any potential data loss issues, you should review this script in detail before running it outside the context of the database designer.*/

BEGIN TRANSACTION

SET QUOTED_IDENTIFIER ON

SET ARITHABORT ON

SET NUMERIC_ROUNDABORT OFF

SET CONCAT_NULL_YIELDS_NULL ON

SET ANSI_NULLS ON

SET ANSI_PADDING ON

SET ANSI_WARNINGS ON

COMMIT

BEGIN TRANSACTION

GO

CREATE TABLE dbo.Tmp_EXTERNA2

(

COD int NOT NULL IDENTITY (1, 1),

USERNAME varchar(20) NULL,

LASTUPDATE datetime NULL

) ON [PRIMARY]GO

SET IDENTITY_INSERT dbo.Tmp_EXTERNA2 ON

GO

IF EXISTS(SELECT * FROM dbo.EXTERNA2)

EXEC('INSERT INTO dbo.Tmp_EXTERNA2 (COD, LASTUPDATE, USERNAME)

SELECT COD, LASTUPDATE, USERNAME FROM dbo.EXTERNA2 WITH (HOLDLOCK TABLOCKX)')

GO

SET IDENTITY_INSERT dbo.Tmp_EXTERNA2 OFF

GO

DROP TABLE dbo.EXTERNA2

GO

EXECUTE sp_rename N'dbo.Tmp_EXTERNA2', N'EXTERNA2', 'OBJECT'

GO

COMMIT

Bom, senão ajudei em muita coisa, espero ao menos não ter atrapalhado. :)

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...