Pergunta

Estou tentando gerar um relatório consultando 2 bancos de dados (Sybase) em ASP clássico.

Eu criei 2 strings de conexão:

connA para banco de dadosA
connB para banco de dadosB

Ambos os bancos de dados estão presentes no mesmo servidor (não sei se isso importa)

Consultas:

q1 = SELECT column1 INTO #temp FROM databaseA..table1 WHERE xyz="A"

q2 = SELECT columnA,columnB,...,columnZ FROM table2 a #temp b WHERE b.column1=a.columnB

seguido pela:

response.Write(rstsql) <br>
set rstSQL = CreateObject("ADODB.Recordset")<br>
rstSQL.Open q1, connA<br>
rstSQL.Open q2, connB

Quando tento abrir esta página em um navegador, recebo uma mensagem de erro:

Erro do provedor Microsoft OLE DB para drivers ODBC '80040e37'

[DataDirect][Driver ODBC Sybase Wire Protocol][SQL Server]#temp não encontrado.Especifique proprietário.objectname ou use sp_help para verificar se o objeto existe (sp_help pode produzir muitos resultados).

Alguém poderia me ajudar a entender qual é o problema e me ajudar a corrigi-lo?

Obrigado.

Foi útil?

Solução

Com ambas as consultas, parece que você está tentando inserir em #temp.#temp está localizado em um dos bancos de dados (para fins de argumentos, banco de dadosA).Então quando você tenta inserir no #temp do banco de dadosB, ele informa que ele não existe.

Tente mudar de Em #temp De para Em banco de dadosA.dbo.#temp De em ambas as afirmações.

Além disso, certifique-se de que as cadeias de conexão tenham permissões no outro banco de dados, caso contrário, isso não funcionará.

Atualizar:relacionado à tabela temporária saindo do escopo - se você tiver uma cadeia de conexão que tenha permissões em ambos os bancos de dados, poderá usá-la para ambas as consultas (enquanto mantém a conexão ativa).Ao consultar a tabela no outro banco de dados, certifique-se de usar o formato [DBName].[Owner].[TableName] ao se referir à tabela.

Outras dicas

Sua tabela de temperatura está fora de escopo, é apenas 'viva' durante a primeira conexão e não estará disponível na 2ª conexão, basta mover tudo em um bloco de código e executá -lo dentro de uma conexão

temp está fora do escopo no segundo trimestre.

Todo o seu trabalho pode ser feito em uma consulta:


SELECT a.columnA, a.columnB,..., a.columnZ
FROM table2 a
INNER JOIN (SELECT databaseA..table1.column1 
            FROM databaseA..table1
            WHERE databaseA..table1.xyz = 'A') b
  ON a.columnB = b.column1
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top