Executar comando em todas databases da instancia SQL
01/03/2017
0
Estou com seguinte problema:
Preciso atualizar todos bancos de dados com código SQL, e achei uma solução na internet conforme abaixo:
DECLARE @script varchar(max)
DECLARE @sql VARCHAR(MAX)
/*
SET LANGUAGE PORTUGUESE
SET @sql = REPLICATE('X', 11000)
SELECT LEN(@sql)
*/
SET @script=''
SET @sql=''
SET @script='
CREATE TABLE CIDADES_BR_NOVO_KPMG_TESTE(
COD_CIDADE int NOT NULL,
NOME varchar(100),
UF char(2)
)
'
select @sql=@sql+CHAR(13)+ 'USE '+ name +CHAR(13)+CHAR(13)+@script+CHAR(13)
FROM sys.databases
WHERE NAME IS NOT NULL
print (@sql)
exec (@sql)
Porém, o VARCHAR é limitado apenas a 8 mil caracteres, e os códigos são enormes, tentei utilizar TEXT porém não é possível usava-la como variável.
Tentei usar a Procedure não documentada 'sp_MSforeachdb' para replicar o código, porém não consegui utiliza-la.
Podem me ajudar ?
Jean Neves
Post mais votado
09/03/2017
Então, em relação a essa questão do VARCHAR(MAX), ele é a praticamente a mesma coisa que o text
Se não me engano ele pega um pouco mais de 2 bilhões de caracteres.
Hoje em dia é desaconselhável a se usar o tipo TEXT, sendo aconselhável o VARCHAR.
Perceba que VARCHAR(8000) é diferente de VARCHAR(MAX).
O que acontece quando você tenta executar esse código? Deu alguma mensagem de erro?
Está usando o SQL Server?
Abraços :)
Calebe Menezes
Mais Posts
09/03/2017
Jean Neves
Primeiramente venho agradecer seu breve retorno!
Então, vamos lá! o TEXT não é possível usar em declaração de variável, e VARCHAR apenas consegue receber 8 mil no total (bytes(caracteres, espaços e virgulas.)) e o NVACHAR 4 mil. Mesmo utilizando o VARCHAR(MAX) e VARCHAR(8000) vai dar no mesmo pois é capacidade que VARCHAR consegue armazenar.
Trabalho com códigos imensos, e 8 mil bytes de espaço não me atende.
Se caso a alguma maneira e aplicar o TEXT, como aplicar?
Poderia implantar no código ?
Valeu!
Abraço!
09/03/2017
Fabiano Carvalho
exec sp_msforeachdb 'use [?] print ''[?]'' '
09/03/2017
Calebe Menezes
Então de acordo com a documentação
O varchar(max) não armazena só 8000 bytes, é muito mais que isso :)
Seguem osl inks que recomendo você dar uma olhada :
https://technet.microsoft.com/pt-br/library/ms178158(v=sql.105).aspx
E principalmente esse abaixo, que fala sobre as situações em que você precisa guardar grandes informações de dados.
https://technet.microsoft.com/pt-br/library/ms178158(v=sql.105).aspx
Qualquer coisa é só responder aqui, se precisar é só falar :)
Abraços camarada!
14/03/2017
Jean Neves
Venho deixar meu muito obrigado!!! Vocês ajudam muito meu dia a dia no trabalho! Abraços a toda equipe.
Clique aqui para fazer login e interagir na Comunidade :)