Inquiridor
Pesquisar nome de tabelas em uma base de dados, servindo de variável para outra consulta

Pergunta
-
Pessoal estou pesquisando, com um cursor, nomes de tabelas que comecem com '455' em um banco de dados (Ex.: dwTre) e jogando os nomes que encontro em uma variável, pois necessito fazer uma soma de uma coluna que está nesta tabela em outro banco de dados (Ex.: dwCont). Meu problema reside em como fazer menção a outro banco de dados.
Em linhas gerais:
DECLARE MyCursor CURSOR FAST_FORWARD FOR
SELECT [name]
FROM [dwTre].[dbo].[DWFileCabinet]
WHERE [name] like '455%'
OPEN MyCursor
FETCH NEXT FROM MyCursor
INTO @Nome
WHILE @@FETCH_STATUS = 0
BEGIN
Print @Nome// FAZER O SELECT SUM() NESTE PONTO EM OUTRO BANCO DE DADOS
FETCH NEXT FROM MyCursor
INTO @Nome
ENDCLOSE MyCursor
DEALLOCATE MyCursor
Espero ter sido claro.
Valeu.
Todas as Respostas
-
Becker,
Como assim não esta conseguindo fazer a menção ao outro banco de dados? Você tem permissão de acesso?
No select que você estará utilizando dentro do cursor será necessário informar o nome completo para poder localizar as tabelas, como por exemplo:
Select col1, col2, col3 from nomedobanco.nomedoowner.nomedatabela
Pedro Antonio Galvao Junior [MVP | MCC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]
-
Olá Júnior.
Estou fazendo o seguinte:
Declare @X as Date
Declare @Tabela as Varchar(30) -- Variável para definir quais tabelas pesquisar
Declare @Nome as Varchar(60) -- Variavel para armazenar o Nome da tabela
Declare @Nome2 as Varchar(60) -- Variavel para armazenar o Nome da tabela
Declare @Val as Integer
Set @X = '30/06/2017'
set @Tabela = '045%'
/************* INICIO CURSOR *************/
DECLARE MyCursor CURSOR FAST_FORWARD FOR
SELECT [name]
FROM [dwsystem_NTI].[dbo].[DWFileCabinet]
WHERE [name] like @Tabela
ORDER BY [name]
OPEN MyCursor
FETCH NEXT FROM MyCursor INTO @Nome
SET @Nome2 = '[dwdata].[dbo].[' + @Nome + ']'
WHILE @@FETCH_STATUS = 0
BEGIN
print @Nome2
SELECT Sum([DWPAGECOUNT])
FROM @Nome2
WHERE [DWSTOREDATETIME] <= @X
FETCH NEXT FROM MyCursor INTO @Val
SET @Nome2 = '[dwdata].[dbo].[' + @Nome + ']'
Print @Val
END
CLOSE MyCursor
DEALLOCATE MyCursor
E o erro que aparece é:
Mensagem 1087, Nível 16, Estado 1, Linha 30
É necessário declarar a variável de tabela "@Nome2". -
Becker,
Você não pode utilizar uma variável na linha do comando Select da maneira que você esta querendo, para isso funcionar seria necessário trabalhar com o conceito de query dinâmica.
Pedro Antonio Galvao Junior [MVP | MCC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]