Usuário com melhor resposta
Criar Campo em todos as bases do servidor

Pergunta
-
Pessoal boa tarde tudo bem?
Tenho um servidor com mais de 100 bancos de dados, cada cliente um banco de dados, por exemplo dentro da tabela1 de todos os bancos preciso criar um campo.
Normalmente uso ALTER TABLE TABELA1 ADD CAMPO10 VARCHAR(14)
Como faço para inserir em todos os bancos de uma só vez?
Grato,
Wagner
Wagner_fix
Respostas
-
Olá, vejo se isso atende.
exec sp_msforeachdb @command1 = N‘ use ? ALTER TABLE TABELA1 ADD CAMPO10 VARCHAR(14)'
Vinicius Fonseca - MCP | MCTS | MCDBA | MCITP | MCTS | MCT | ITIL Foundation - DGA SISTEMAS - Se minha resposta for útil, classifique-a. :)
- Marcado como Resposta Wagner_fix sexta-feira, 3 de novembro de 2017 16:13
Todas as Respostas
-
Olá, vejo se isso atende.
exec sp_msforeachdb @command1 = N‘ use ? ALTER TABLE TABELA1 ADD CAMPO10 VARCHAR(14)'
Vinicius Fonseca - MCP | MCTS | MCDBA | MCITP | MCTS | MCT | ITIL Foundation - DGA SISTEMAS - Se minha resposta for útil, classifique-a. :)
- Marcado como Resposta Wagner_fix sexta-feira, 3 de novembro de 2017 16:13
-
Wagner, você pode utilizar o script abaixo
CREATE TABLE #TmpBases ( ID INT IDENTITY(1,1) ,NomeBase VARCHAR(100) ) INSERT INTO #TmpBases (NomeBase) SELECT name FROM Sys.databases where database_id > 5 DECLARE @Controle INT = 1, @Comando NVARCHAR(MAX), @NomeBase VARCHAR(100) WHILE @Controle <= (SELECT MAX(ID) FROM #TmpBases) BEGIN SELECT @NomeBase = NomeBase FROM #TmpBases WHERE ID = @Controle SET @Comando = N'USE ' + @NomeBase + ' ALTER TABLE TABELA1 ADD CAMPO10 VARCHAR(14)' EXEC (@Comando) SET @Controle = @Controle + 1 END DROP TABLE #TmpBases
Lembrando que esse código não deve ser colocado dessa maneira em qualquer aplicação pelo risco de SQL Injection ok?
Mariana Del Nero /* Se a resposta foi útil, não esqueça de marcá-la */
- Sugerido como Resposta Junior Galvão - MVPMVP sábado, 4 de novembro de 2017 12:13
-
Olá, vejo se isso atende.
exec sp_msforeachdb @command1 = N‘ use ? ALTER TABLE TABELA1 ADD CAMPO10 VARCHAR(14)'
Vinicius Fonseca - MCP | MCTS | MCDBA | MCITP | MCTS | MCT | ITIL Foundation - DGA SISTEMAS - Se minha resposta for útil, classifique-a. :)
Vinícus
Essa procedure não funciona em 100% das bases.
Tive alguns problemas em rotinas de monitoramento minhas onde em uma execução ela passava por determinado database, e em outra execução não!
Não sei o que faz ela ignorar determinado database, mas sei que isso acontece e com uma certa frequência. Por isso deixei de usá-la.
Mariana Del Nero /* Se a resposta foi útil, não esqueça de marcá-la */
-
Olá, vejo se isso atende.
exec sp_msforeachdb @command1 = N‘ use ? ALTER TABLE TABELA1 ADD CAMPO10 VARCHAR(14)'
Vinicius Fonseca - MCP | MCTS | MCDBA | MCITP | MCTS | MCT | ITIL Foundation - DGA SISTEMAS - Se minha resposta for útil, classifique-a. :)
Vinícus
Essa procedure não funciona em 100% das bases.
Tive alguns problemas em rotinas de monitoramento minhas onde em uma execução ela passava por determinado database, e em outra execução não!
Não sei o que faz ela ignorar determinado database, mas sei que isso acontece e com uma certa frequência. Por isso deixei de usá-la.
Mariana Del Nero /* Se a resposta foi útil, não esqueça de marcá-la */
Estranho, sempre funcionou para mim, inclusive colocando filtros para apenas as bases que eu gostaria de rodar o comando.
De qualquer forma acho que vale o teste e um ambiente de testes.
Vinicius Fonseca - MCP | MCTS | MCDBA | MCITP | MCTS | MCT | ITIL Foundation - DGA SISTEMAS - Se minha resposta for útil, classifique-a. :)
-
-
-
-
Olá, vejo se isso atende.
exec sp_msforeachdb @command1 = N‘ use ? ALTER TABLE TABELA1 ADD CAMPO10 VARCHAR(14)'
Vinicius Fonseca - MCP | MCTS | MCDBA | MCITP | MCTS | MCT | ITIL Foundation - DGA SISTEMAS - Se minha resposta for útil, classifique-a. :)
Vinícus
Essa procedure não funciona em 100% das bases.
Tive alguns problemas em rotinas de monitoramento minhas onde em uma execução ela passava por determinado database, e em outra execução não!
Não sei o que faz ela ignorar determinado database, mas sei que isso acontece e com uma certa frequência. Por isso deixei de usá-la.
Mariana Del Nero /* Se a resposta foi útil, não esqueça de marcá-la */
Estranho, sempre funcionou para mim, inclusive colocando filtros para apenas as bases que eu gostaria de rodar o comando.
De qualquer forma acho que vale o teste e um ambiente de testes.
Vinicius Fonseca - MCP | MCTS | MCDBA | MCITP | MCTS | MCT | ITIL Foundation - DGA SISTEMAS - Se minha resposta for útil, classifique-a. :)
Um trecho do artigo abaixo
"The problems with this procedure are well documented – the most notable being that it can skip databases without any warning"
Read more: http://shaunjstuart.com/archive/2012/10/its-time-to-retire-sp_msforeachdb/#ixzz4xO1qGzfW
Under Creative Commons License: Attribution Non-Commercial No Derivatives"
Então para rotinas críticas eu não uso essa procedure.Mariana Del Nero /* Se a resposta foi útil, não esqueça de marcá-la */