Executar comando em todas databases da instancia SQL
Prezados,
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 ?
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
Curtidas 0
Melhor post
Calebe Menezes
09/03/2017
Olá Jean, tudo bem?
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 :)
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 :)
GOSTEI 1
Mais Respostas
Jean Neves
01/03/2017
Olá meu amigo!
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!
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!
GOSTEI 0
Fabiano Carvalho
01/03/2017
Na procedure informada, não tem segredo para usa-la, basta fazer isso
exec sp_msforeachdb 'use [?] print ''[?]'' '
GOSTEI 0
Calebe Menezes
01/03/2017
Olá Jean :)
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!
Então de acordo com a documentação
Os dados char ou varchar podem ser um único caractere ou uma cadeia de caracteres com no máximo de 8.000 caracteres de dados char, e até 2^31 caracteres de dados varchar. Os tipos de dados varchar podem tomar duas formas. Os dados varchar podem ter um comprimento máximo especificado de caracteres, por exemplo, varchar(6) indicando que esse tipo de dados pode armazenar no máximo seis caracteres; ou pode ter a forma varchar(max),, que aumenta o número máximo de caracteres a serem armazenados por esse tipo de dados para 2^31. Para obter mais informações sobre o varchar(max),, consulte Usando tipos de dados de valor grande.
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!
GOSTEI 0
Jean Neves
01/03/2017
Devmedia!
Venho deixar meu muito obrigado!!! Vocês ajudam muito meu dia a dia no trabalho! Abraços a toda equipe.
Venho deixar meu muito obrigado!!! Vocês ajudam muito meu dia a dia no trabalho! Abraços a toda equipe.
GOSTEI 0