Ir para conteúdo

Arquivado

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

scorpio

Inserir

Recommended Posts

Oi! :rolleyes:

 

Situação: Tenho um base SyBase e um SQL 2005. Tenho que transferir os dados da SyBase para o SQL.

Tenho umas 50 tabelas, algumas com 20 milhoes de registros.

 

Fizemos um programa para realizar essa carga, que faz assim

 

Lê os dado da tabela SyBase

Lê todos os valores dos atributos para montar a instrução INSERT. <-problema aqui

Grava no SQL.

 

Quando ele está lendo os valores, ele faz assim

 

if IsDbNull(campo) then
 NULL
if isNUmeric(campo) then
 valor
if IsDate(campo) then
 'formata para a data sql'
else
 'valor'

Mas se eu tenho um campo do tipo Char, VarChar que contenha por exemplo "1100", ao passar pelo IsNumeric ele dá true e escreve o insert como se fosse para numérico. E quando for inserir no SQL vai dar erro.

 

Existe alguma maneira de fazer um ligação direto do SyBase para o SQL?

Tem como eu escrever um INSERt geralzão? com tipos variant? (hehehe)

Alguma outra idéia?

 

 

obrigado.

 

Abraços!!!!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, você vai conseguir excelentes resultados com consultas preparadas, se a sua linguagem suportar. Com esse tipo de instrução você prepara as instruções e quem atribui os valores na hora de executar é o próprio banco...

 

Sei que o PHP, por exemplo, consegue...

 

Sobre prepared statements: http://msdn.microsoft.com/en-us/library/aa...10(SQL.80).aspx

Como usar no PHP: http://br.php.net/pdo.prepare

 

Uma segunda opção: Você consegue saber automaticamente os tipos de campo de uma tabela qualquer no MS SQL usando uma query similar a essa:

 

SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'Nome_da_sua_tabela'

Dessa forma, você no início do programa de importação, carregaria os tipos de dados de cada coluna e ao invés de checar cada valor ao montar o insert você checaria qual campo de destino ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vou tentar usar esse "INFORMATION_SCHEMA.COLUMNS" no SyBase. Me parecer ser mais simples de implementar, é que não tenho muito tempo.

Bom em todo caso estou usando VB.Net, postei lá na área sobre como pegar o tipo de campo através do OdbcDataReader, que seria até mais fácil de implementar que essa sua opação.

 

Muito obrigado

 

Abraços!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Por enquanto achei uma solução. Por enquanto esta ok.

 

Criei uma conexão direto do SQL com o Sybase.

 

Para criar a conexão usei

EXEC sp_addlinkedserver 'Syb','Sybase','MSDASQL','DRIVER={Sybase ASE ODBC Driver};SRVR=Sybase Server Name;UID=user;PWD=senha'

 

Dai quando for fazer um select

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

 

Mas daí eu uso o Export Data... para jogar no outra banco de dados.

 

 

 

Abraços!

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.