Importar datos a una tabla en SQL 2000 desde un txt

24/11/2006 - 02:02 por Fabian | Informe spam
Hola gente, tengo una tabla cuyo unico campo ej: "nombre" que es clave y no
se repiten lo datos. Quiero poder importar los datos de un txt en donde
puede haber "nombres" que ya estan cargados en la tabla. Como puedo hacerlo
ya que al intentarlo con importar datos desde al adm coorporativo, los va
incorporando pero cuando se repite algun dato, da error: "no se puede
ingresar una clave duplicada".
Si le quito la clave, me los importará pero habra repetidos y cuando quiera
ponerle la clave a ese campo tambien dará error...
Pienso que hay alguna forma desde sql sin que tenga que hacer algun programa
en VB que elimine los repetidos no?
Desde ya muchas gracias.
Fabian

Preguntas similare

Leer las respuestas

#6 Fabian
29/11/2006 - 17:18 | Informe spam
Hola y gracias a todos por la respuesta.
Estuve probando lo de:
insert into nombres (nombre)
select a.nombre from
(select distinct nombre from temp) t
left join nombres n on t.nombre=n.nombre
where n.nombre is null
y lo que me pasa es que en un momento me dice que no puede ingresar un campo
null...
Lo que detecté es que en uno de los registros había solo 1 caracter de
control, lo quite y sigue igual, por lo que voy a revisar cada uno de los
txt que componian ese archivo de nombre (estaba compuesto por 5 o 6 txt) por
ahi en alguno otro hay null.
Lo de "where n.nombre is null" al final esta ok no ? es para el left join..
Es que casi nunca trabaje con el left join... Disculpen... :-)
Gracias nuevamente
Fabian
"Maxi" escribió en el mensaje
news:Op9q2%
ok, pero ojo con el opendatasource, por ej en 2005 esta deshabilitado y
hay que habilitarlo ya que es un lugar donde podrias tener problemas de
seguridad


Salu2

Microsoft MVP SQL Server
Culminis Speaker
INETA Speaker

"Monica Rivera" escribió en el
mensaje news:
De acuerdo. Puede usar BCP para importar los datos a una tabla y hacer el
join a esa tabla. Mi sugerencia de usar Opendatasource seria en el caso
de
que prefiera hacer el join directamente al txt file.


"Maxi" wrote:

Hola, yo no recomendaria el uso de Opendatasource, si le recomendaria el
uso
de de BCP para este tipo de operacion


Salu2

Microsoft MVP SQL Server
Culminis Speaker
INETA Speaker

"Monica Rivera" escribió en el
mensaje news:
> Puedes importar el txt a una tabla temporal 'temp' y luego insertar
> los
> datos
> a la tabla (digamos que la tabla se llama 'nombres' con un campo
> 'nombre'),
> asi:
>
> insert into nombres (nombre)
> select a.nombre from
> (select distinct nombre from temp) t
> left join nombres n on t.nombre=n.nombre
> where n.nombre is null
>
> Tambien puedes evitar importar primero la tabla a 'temp' y acceder el
> txt
> directamente usando OPENDATASOURCE.
>
> "Fabian" wrote:
>
>> Hola gente, tengo una tabla cuyo unico campo ej: "nombre" que es
>> clave y
>> no
>> se repiten lo datos. Quiero poder importar los datos de un txt en
>> donde
>> puede haber "nombres" que ya estan cargados en la tabla. Como puedo
>> hacerlo
>> ya que al intentarlo con importar datos desde al adm coorporativo,
>> los va
>> incorporando pero cuando se repite algun dato, da error: "no se puede
>> ingresar una clave duplicada".
>> Si le quito la clave, me los importará pero habra repetidos y cuando
>> quiera
>> ponerle la clave a ese campo tambien dará error...
>> Pienso que hay alguna forma desde sql sin que tenga que hacer algun
>> programa
>> en VB que elimine los repetidos no?
>> Desde ya muchas gracias.
>> Fabian
>>
>>
>>









Respuesta Responder a este mensaje
#7 Simon Cascante
07/12/2006 - 15:16 | Informe spam
Lo que pasa con la consulta, es que en el WHERE estas usando la tabla
que no es, debes de usar la tabla principal, no la tabla del LEFT JOIN,
de la siguiente manera:

insert into nombres (nombre)
select t.nombre from
(select distinct nombre from temp) t
left join nombres n on (n.nombre = t.nombre)
where t.nombre is null

Como ves, lo único que cambié en el WHERE fue, en lugar de usar
'n.nombre' usé 't.nombre'.

Otra manera de validar que los registros que estas ingresando a la
tabla, no existan, es la siguiente:

insert into nombres (
nombre)
select t.nombre
from (select distinct
nombre
from temp) t
where not exists (select 'X'
from nombres
where nombre = t.nombre)

Sinceramente, no se cual de las dos formas es más eficiente, pero a mi
humilde opinión, es más sencillo de leer la segunda.

Espero te sirva de ayuda.

Saludos

Simon Cascante
Consultor de Inteligencia de Negocios

Fabian ha escrito:

Hola y gracias a todos por la respuesta.
Estuve probando lo de:
insert into nombres (nombre)
select a.nombre from
(select distinct nombre from temp) t
left join nombres n on t.nombre=n.nombre
where n.nombre is null
y lo que me pasa es que en un momento me dice que no puede ingresar un campo
null...
Lo que detecté es que en uno de los registros había solo 1 caracter de
control, lo quite y sigue igual, por lo que voy a revisar cada uno de los
txt que componian ese archivo de nombre (estaba compuesto por 5 o 6 txt) por
ahi en alguno otro hay null.
Lo de "where n.nombre is null" al final esta ok no ? es para el left join..
Es que casi nunca trabaje con el left join... Disculpen... :-)
Gracias nuevamente
Fabian
"Maxi" escribió en el mensaje
news:Op9q2%
> ok, pero ojo con el opendatasource, por ej en 2005 esta deshabilitado y
> hay que habilitarlo ya que es un lugar donde podrias tener problemas de
> seguridad
>
>
> Salu2
>
> Microsoft MVP SQL Server
> Culminis Speaker
> INETA Speaker
>
> "Monica Rivera" escribió en el
> mensaje news:
>> De acuerdo. Puede usar BCP para importar los datos a una tabla y hacer el
>> join a esa tabla. Mi sugerencia de usar Opendatasource seria en el caso
>> de
>> que prefiera hacer el join directamente al txt file.
>>
>>
>> "Maxi" wrote:
>>
>>> Hola, yo no recomendaria el uso de Opendatasource, si le recomendaria el
>>> uso
>>> de de BCP para este tipo de operacion
>>>
>>>
>>> Salu2
>>>
>>> Microsoft MVP SQL Server
>>> Culminis Speaker
>>> INETA Speaker
>>>
>>> "Monica Rivera" escribió en el
>>> mensaje news:
>>> > Puedes importar el txt a una tabla temporal 'temp' y luego insertar
>>> > los
>>> > datos
>>> > a la tabla (digamos que la tabla se llama 'nombres' con un campo
>>> > 'nombre'),
>>> > asi:
>>> >
>>> > insert into nombres (nombre)
>>> > select a.nombre from
>>> > (select distinct nombre from temp) t
>>> > left join nombres n on t.nombre=n.nombre
>>> > where n.nombre is null
>>> >
>>> > Tambien puedes evitar importar primero la tabla a 'temp' y acceder el
>>> > txt
>>> > directamente usando OPENDATASOURCE.
>>> >
>>> > "Fabian" wrote:
>>> >
>>> >> Hola gente, tengo una tabla cuyo unico campo ej: "nombre" que es
>>> >> clave y
>>> >> no
>>> >> se repiten lo datos. Quiero poder importar los datos de un txt en
>>> >> donde
>>> >> puede haber "nombres" que ya estan cargados en la tabla. Como puedo
>>> >> hacerlo
>>> >> ya que al intentarlo con importar datos desde al adm coorporativo,
>>> >> los va
>>> >> incorporando pero cuando se repite algun dato, da error: "no se puede
>>> >> ingresar una clave duplicada".
>>> >> Si le quito la clave, me los importará pero habra repetidos y cuando
>>> >> quiera
>>> >> ponerle la clave a ese campo tambien dará error...
>>> >> Pienso que hay alguna forma desde sql sin que tenga que hacer algun
>>> >> programa
>>> >> en VB que elimine los repetidos no?
>>> >> Desde ya muchas gracias.
>>> >> Fabian
>>> >>
>>> >>
>>> >>
>>>
>>>
>>>
>
>
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida