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

#11 Alejandro Mesa
07/05/2005 - 03:01 | Informe spam
Nicola,

Decididamente que cuando uno puede ver el codigo se tiene una mejor idea de
lo que esta pasando. Vamos por paso:

Mostrar la cita
Eso se debe a que declarastes la variable @Vueltas pero no la inicializastes
en ningun momento por lo que su valor es NULL y ya tu sabes que no podemos
usar operadores de igualdad con valores NULL, asi que la sentencia:

Mostrar la cita
no seleccionara nada pues PK_Line = @Vueltas no se cumplicara. Tampoco se
estava incrementando la variable en la expresion:

set @vueltas = @vueltas + 1

porque NULL mas cualquier valor es NULL.

Otra cosa, en una sentencia select se pouede asignar mas de una variable,
asi que en vez de tener cinco sentencias select para asignar valor a cada una
de tus variables, puedes usar una sola sentencia donde se le asigna el valor
de la columna correspondiente a cada variable:

SELECT
@Cedula = FK_Estudiante,
@Cod_Materia = CodMateria,
@Periodo = FK_Periodo,
@Calificacion = Calificacion,
@Estado = ESTADO
FROM #tbl_TempFile
WHERE PK_Line = @Vueltas

Ahora biene el ultimo punto. De la forma que lo haces, es igual que si
estuvieses usando cursores, pues a la final recorres la tabla fila a fila y
en 500,000 filas esto te tomara bastante tiempo. Lo que queda por saber ahora
es lo que hace el procedimiento SP_IMPORTAR_Calificaciones, el cual se debe
adaptar para manipular la tabla temporal como un conjunbto y no fila a fila.
Aca te pongo el script con los arreglos necesarios para que corra, solo falta
que nos dejes saber lo que hace el procedimiento para cambiarlo y buscar una
solucion de conjunto.


SET NOCOUNT ON

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

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

set @vueltas = 1
set @i = (SELECT COUNT(*) FROM #tbl_TempFile)

WHILE(@Vueltas <= @i)
BEGIN
SELECT
@Cedula = FK_Estudiante,
@Cod_Materia = CodMateria,
@Periodo = FK_Periodo,
@Calificacion = Calificacion,
@Estado = 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
go


AMB

"Nicola Strappazzon" wrote:

Mostrar la cita
#12 Nicola Strappazzon
07/05/2005 - 20:08 | Informe spam
Hola, caramba jejejjejeej, de verdad q gracias por la paciencia y la
dedicación, yo te mando el SP_IMPORTAR_Calificaciones el lunes por que no me
lleve los codigos fuentes, estan en la pc de trabajo de la universidad, por
cierto todo esto es para hacer un sistema de inscripcion via internet y
pasar todo de un sistema viejo de natural/adabas a sql server y asp.net,
entonces nos encontramos en el foro el lunes :D. buen fin de semana.

"Nicola Strappazzon" wrote in message
news:
Mostrar la cita
#13 Nicola Strappazzon
09/05/2005 - 15:10 | Informe spam
Buenos dias, aqui te mando el sp de la consulta sp_importar_calificacion.

Bien, te cuento q hace este SP, el recive del famoso archivo plano cada
registro y lo "normaliza" por decirlo de una forma, como es eso, bien, el
recoje una serie de datos por medio de un string "@Asignatura" y busca en la
DB su clave primaria para despues insertarlos en la tabla
tbl_MateriasInscritas.

ALTER PROCEDURE [SP_IMPORTAR_Calificaciones]
(@PK_Estudiante [int],
@FK_Periodo [int],
@Asignatura [varchar] (8),
@Calificacion [tinyint],
@FK_MateriaEstado [tinyint])
AS

SET NOCOUNT ON

DECLARE @Pensum INT
DECLARE @Escuela INT
DECLARE @Semestre INT
DECLARE @Ordinal INT
DECLARE @TEMP_Asignatura INT

SET @Pensum = SUBSTRING(@Asignatura, 1, 2)
SET @Escuela = SUBSTRING(@Asignatura, 3, 2)
SET @Semestre = SUBSTRING(@Asignatura, 5, 2)
SET @Ordinal = SUBSTRING(@Asignatura, 7, 2)

SET @TEMP_Asignatura = (SELECT PK_Asignatura
FROM dbo.tbl_Asignaturas
WHERE FK_Pensum = @Pensum AND
FK_Escuela = @Escuela AND
FK_Semestre = @Semestre AND
Ordinal = @Ordinal)

IF (EXISTS (SELECT PK_Persona FROM tbl_Personas WHERE PK_Persona =
@PK_Estudiante))
BEGIN
IF (NOT EXISTS (SELECT FK_Asignatura
FROM tbl_MateriasInscritas
WHERE FK_Estudiante = @PK_Estudiante AND
FK_Asignatura = @TEMP_Asignatura AND
FK_Periodo = @FK_Periodo AND
FK_MateriaEstado = @FK_MateriaEstado AND
Calificacion = @Calificacion))
BEGIN
INSERT INTO tbl_MateriasInscritas(
FK_Estudiante,
FK_Asignatura,
FK_Periodo,
FK_MateriaEstado,
Calificacion)
VALUES(
@PK_Estudiante,
@TEMP_Asignatura,
@FK_Periodo,
@FK_MateriaEstado,
@Calificacion)
RETURN 1
END
ELSE
BEGIN
RETURN -3
END
END
ELSE
BEGIN
RETURN -4
END



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