Problema con la importacion de archivo y tabla temporal con key

06/05/2005 - 15:37 por Nicola Strappazzon | Informe spam
Hola de nuevo muchachos, estoy tratando de poder importar un archivo a una
tabla con primary key, pero al hacerlo me da un error, le quito el primary
key y funciona perfectamente, el caso es q tengo que después recorrer esa
tabla y necesito usar el primary key para poder hacerlo, ya que en el
archivo q estoy importando existe un primary key pero no continuo, que es la
Cedula de Identidad, como un numero de identificación en Venezuela, y no
puedo hacer un contador con eso por q no es un numero continuo y seria MUYYY
LAAARRRGGGOOOOO recorrerlo. Por eso el poner mi idea el PK en la tabla
temporal, alguna sugerencia es bienvenida!



Gracias.

Preguntas similare

Leer las respuestas

#6 Gustavo Larriera [MVP]
06/05/2005 - 17:05 | Informe spam
Con esta modificacion al archivo, funciona:

11992015|06100102|67|11|6|0
11992015|06100101|67|16|6|0
11992015|06100103|67|14|6|0
11992015|06100108|68|13|6|0
11992015|06100206|68|14|6|0
11992015|06100205|68|13|6|0
11992015|06100201|68|15|6|0
11992015|06100207|68|13|6|0
11992015|06100203|68|14|6|0

USE tempdb
GO

CREATE TABLE #tbl_TempFile(
PK_Line INT IDENTITY (1, 1) NOT FOR REPLICATION NOT NULL PRIMARY KEY,
FK_Estudiante INT NOT NULL,
CodMateria VARCHAR(8) NOT NULL,
FK_Periodo INT NOT NULL,
Calificacion TINYINT NOT NULL,
ESTADO TINYINT NOT NULL
)

GO

BULK INSERT #tbl_TempFile
FROM 'x:\Record Academico.TXT'
WITH(
FIELDTERMINATOR = '|',
ROWTERMINATOR = ''
)
GO

SELECT * FROM #tbl_TempFile

PK_Line FK_Estudiante CodMateria FK_Periodo Calificacion ESTADO
1 6100102 67 11 6 0
2 6100101 67 16 6 0
3 6100103 67 14 6 0
4 6100108 68 13 6 0
5 6100206 68 14 6 0
6 6100205 68 13 6 0
7 6100201 68 15 6 0
8 6100207 68 13 6 0
9 6100203 68 14 6 0

(9 row(s) affected)


Gustavo Larriera
Uruguay LatAm
Blog: http://sqljunkies.com/weblog/gux/
MVP profile: http://aspnet2.com/mvp.ashx?GustavoLarriera
Este mensaje se proporciona "COMO ESTA" sin garantias y no otorga ningun
derecho / This posting is provided "AS IS" with no warranties, and confers
no rights.

"Gustavo Larriera [MVP]" wrote in message
news:
Mostrar la cita
#7 Nicola Strappazzon
06/05/2005 - 17:24 | Informe spam
Miercoles muchachos, Gracias nuevamente, de verdad que estoy agradecido por
la dedicacion que me han prestado!, jajajaja que bien ! (y) :D

"Nicola Strappazzon" wrote in message
news:%
Mostrar la cita
#8 Nicola Strappazzon
06/05/2005 - 21:02 | Informe spam
estaba probando tu metodo, pero no me funciona muy bien por que me dice
error al no conseguir la columna PK_Line, y me parece extraño, por q hago un
select * from tabla, y si me muestra la columnas con sus respectivos ID,
pero hago un select buscando algo en esa columna en especifivo y nada... me
da el error q te mencione :S

"Alejandro Mesa" wrote in message
news:
Mostrar la cita
#9 Alejandro Mesa
06/05/2005 - 21:44 | Informe spam
Nicola,

No entiendo que pasa. Cual metodo escogistes?. Si escogistes el segundo,
entonces recuerda crear la tabla temporal sin la columna identity, y
adicionarla despues de que la sentencia bulk insert haya terminado. Fijate
que en el ejemplo esta comentada la columna.

Mostrar la cita
...


AMB


"Nicola Strappazzon" wrote:

Mostrar la cita
#10 Nicola Strappazzon
06/05/2005 - 22:56 | Informe spam
Ok. use el metodo 2, el llena la tabla perfectamente, le coloca la columna
con clave primaria y funciona bien, pero cuando mando hacer una busqueda con
el where no me reconose la columna con la clave primaria, Recuerda que estoy
tratando de poder migrar los 500.000 mil registros usando conjuntos y no
cursores como me hablaron aller.

Te muestro el codigo:

SET NOCOUNT ON

DECLARE @Vueltas INT
DECLARE @Cedula INT
DECLARE @Cod_Materia VARCHAR(8)
DECLARE @Periodo INT
DECLARE @Calificacion TINYINT
DECLARE @Estado TINYINT

CREATE TABLE #tbl_TempFile(
FK_Estudiante INT NOT NULL,
CodMateria VARCHAR(8) NOT NULL,
FK_Periodo INT NOT NULL,
Calificacion TINYINT NOT NULL,
ESTADO TINYINT NOT NULL)

BULK INSERT #tbl_TempFile
FROM 'D:\My Documents\Visual Studio Projects\Applications\SAVA2.0\Datos de
prueba\Archivos a Importar\Record Academico.TXT'
WITH(
FIELDTERMINATOR = '|',
ROWTERMINATOR = ''
)

ALTER TABLE #tbl_TempFile
ADD PK_Line INT IDENTITY (1, 1) NOT FOR REPLICATION NOT NULL PRIMARY KEY

PK_Line FROM #tbl_TempFile

WHILE(@Vueltas <= (SELECT COUNT(*) FROM #tbl_TempFile))
BEGIN
SET @Cedula = (SELECT FK_Estudiante FROM #tbl_TempFile WHERE PK_Line =
@Vueltas)
SET @Cod_Materia = (SELECT CodMateria FROM #tbl_TempFile WHERE PK_Line =
@Vueltas)
SET @Periodo = (SELECT FK_Periodo FROM #tbl_TempFile WHERE PK_Line =
@Vueltas)
SET @Calificacion = (SELECT Calificacion FROM #tbl_TempFile WHERE PK_Line =
@Vueltas)
SET @Estado = (SELECT ESTADO FROM #tbl_TempFile WHERE PK_Line = @Vueltas)

EXEC SP_IMPORTAR_Calificaciones @Cedula, @Periodo, @Cod_Materia,
@Calificacion, @Estado
SET @Vueltas = @Vueltas + 1
END

DROP TABLE #tbl_TempFile

"Alejandro Mesa" wrote in message
news:
Mostrar la cita
Ads by Google
Search Busqueda sugerida