Executar comando em todas databases da instancia SQL

SQL

Banco de Dados

01/03/2017

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

Curtidas 0

Melhor post

Calebe Menezes

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

Mais Respostas

Jean Neves

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!
GOSTEI 0
Fabiano Carvalho

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

Calebe Menezes

01/03/2017

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!
GOSTEI 0
Jean Neves

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.
GOSTEI 0
POSTAR