Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Gabriel at me

sp_linkedserver com SQL 2005 e IBM DB2 | erros

Recommended Posts

Pessoal, tudo certo?

 

Estou precisando a partir do SQL Server 2005 Standard acessar o IBM DB2 9.1.

 

Ambiente DB2

Nome do DB: HORUS

Database server = DB2/NT 9.1.6

SQL authorization ID = DB2ADMIN

Local database alias = HORUS

Conecto com o usuario db2admin e senha password.

 

Ai digitei o seguinte no SQL Server 2005

EXEC sp_addlinkedserver

@server='ibmdb2',

@srvproduct='IBM DB2',

@catalog='HORUS',

@provider='IBMDADB2.DB2_91',

@provstr='Provider=IBMDADB2.DB2_91; Database=HORUS; Hostname=192.168.1.102; Protocol=TCPIP; Port=50001; Uid=db2admin; Pwd=password;'

 

Ai quando executo um SELET

(SELECT * FROM IBMDB2.HORUS.DB2ADMIN.T1)

 

Ele retorna o seguinte erro:

Msg 7313, Level 16, State 1, Line 1

An invalid schema or catalog was specified for the provider "IBMDADB2.DB2_91" for linked server "IBMDB2".

 

Alguem pode me ajudar a resolver isto?

A tabela T1 ja esta criada no ambiente do DB2 no schema db2admin.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Gabriel,

 

para executar um select, tem que fazer deste modo:

Select * from openquery(ibmdb2,'Select * from tabela')

Tem um exemplo do Scorpio aqui:

http://forum.imasters.com.br/index.php?showtopic=328345

 

Abçs

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estes exemplos foram tirados do books on line do SQL

 

B. Executing an UPDATE pass-through query

The following example uses a pass-through UPDATE query against the linked server created in example A.

 

 

UPDATE OPENQUERY (OracleSvr, 'SELECT name FROM joe.titles WHERE id = 101')

SET name = 'ADifferentName';

 

 

C. Executing an INSERT pass-through query

The following example uses a pass-through INSERT query against the linked server created in example A.

 

 

INSERT OPENQUERY (OracleSvr, 'SELECT name FROM joe.titles')

VALUES ('NewTitle');

 

 

D. Executing a DELETE pass-through query

The following example uses a pass-through DELETE query to delete the row inserted in example C.

 

 

DELETE OPENQUERY (OracleSvr, 'SELECT name FROM joe.titles WHERE name = ''NewTitle''');

 

 

Espero que ajude

 

Abçs

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mr,

 

Mexi uma vez em um ambiente sql server q tem linked server com db2, oracle e um outro sql server.

 

A forma que uso para executar queries, é diferente do q vcs estão mostrando... não que esteja errado, mas atraves da sintaxe padrão voce consegue chamar o servidor sem problemas, somente fazendo a referencia ao linked server...

 

-- um exemplo executando um top 10 em uma tabela db2.

select top 10 * from lsdwdb2..dwxx.tb001caduser;

 

da mesma forma que rodo um select, executo qq comando, como insert, delete, etc.

 

faça alguns testes com a sintaxe do linked server no próprio comando select que acredito que voce acertando essa sintaxe, resolverá o problema que precisa com outros comandos, ok?

 

abs,

Ska

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal...

 

com openquery funciona, porem preciso que ele funcione como o ska_ska disse..... de forma transparente no sQL...

 

 

select * from linked.catalogo.schema.tabela

 

Se eu executar da forma acima, ele me retorna o seguinte

Msg 7314, Level 16, State 1, Line 1

The OLE DB provider "IBMDADB2.DB2_91" for linked server "ibmdb2" does not contain the table ""horus"."db2admin"."t1"". The table either does not exist or the current user does not have permissions on that table.

 

 

porem existe a tabela t1 no schema db2admin no db2.....

 

alguem tem alguma opniao?

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.