Executar comando em todas databases da instancia SQL

01/03/2017

0

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 ?
Jean Neves

Jean Neves

Responder

Post mais votado

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 :)

Calebe Menezes

Calebe Menezes
Responder

Mais Posts

09/03/2017

Jean Neves

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!
Responder

09/03/2017

Fabiano Carvalho

Na procedure informada, não tem segredo para usa-la, basta fazer isso

exec sp_msforeachdb 'use [?]
print ''[?]'' '
Responder

09/03/2017

Calebe Menezes

Olá Jean :)

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!
Responder

14/03/2017

Jean Neves

Devmedia!

Venho deixar meu muito obrigado!!! Vocês ajudam muito meu dia a dia no trabalho! Abraços a toda equipe.
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar