Hoe invoegen in een permanente tafel?

Ik heb de opgeslagen procedure die een andere procedure aanroept (dit levert enkele rijen met gegevens op).

In de eerste procedure moet ik al die rijen invoegen in een permanente tabel en de inhoud van deze tabel retourneren. Ik heb dit, maar met een tijdelijke tafel.

Hoe kan ik in een permanente tabel invoegen en deze vervolgens retourneren?

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[paBltBuscarBoletasASA] @id_Asa int  
      -- Add the parameters for the stored procedure here
AS
DECLARE @Query int
CREATE TABLE #tablaTemporal (Numero_Pregunta varchar, Numero_Boleta int, Cultivo varchar, Numero_Siembra int, Detalle_Error varchar)
DECLARE miCursor CURSOR FOR

                SELECT 
                    localizacion.c_Fk_IdBoleta
                FROM 
                    Blt_Boleta as boleta, Fnc_Localizacion as localizacion
                WHERE 
                    boleta.c_Pk_IdBoleta = localizacion.c_Fk_IdBoleta AND
                    localizacion.si_CodAsa = @id_Asa
OPEN miCursor
FETCH NEXT FROM miCursor INTO @Query

WHILE @@FETCH_STATUS = 0
BEGIN
 INSERT INTO #tablaTemporal(Numero_Pregunta, Numero_Boleta, Cultivo, Numero_Siembra, Detalle_Error) exec dbo.paBltMarcarErroresBoleta @Query

    FETCH NEXT FROM miCursor INTO @Query
END

CLOSE miCursor
DEALLOCATE miCursor 
1
toegevoegd de auteur marc_s, de bron
U voegt in een permanente tabel de exact dezelfde manier in als u invoegt in een tijdelijke tabel - met een instructie INSERT INTO . Het enige verschil: een tabelnaam met een # of ## aan het begin is een tijdelijke tabel - anders is het een permanente tabel.
toegevoegd de auteur marc_s, de bron
Waarom gebruik je in hemelsnaam een ​​cursor? Het is niet nodig om een ​​cursor te gebruiken en u moet de database niet met één verbinden. Cursors zijn vaak (zoals in dit geval) een SQL antipatroon en zouden bijna nooit in productiecode moeten worden gebruikt. U mag een record van één record niet opnieuw gebruiken om gegevens in te voegen of gegevens bij te werken om meerdere rcord-invoegingen met een cursor af te handelen. Pas de prod aan om meerdere recordinserties correct te behandelen.
toegevoegd de auteur HLGEM, de bron
Moet u de permanentant-tabel vervangen door nieuwe gegevens telkens wanneer de code wordt uitgevoerd of moet u geaccumuleerde gegevens retourneren?
toegevoegd de auteur HLGEM, de bron

2 antwoord

U kunt dit onderaan uw opgeslagen proc doen om de tijdelijke tabel in een permanente te kopiëren:

-- To insert into a permanent table
INSERT INTO MyPermanentTable (Numero_Pregunta, Numero_Boleta, Cultivo, 
                              Numero_Siembra, Detalle_Error)
SELECT Numero_Pregunta, Numero_Boleta, Cultivo, Numero_Siembra, Detalle_Error
FROM   #tablaTemporal

-- To get the result set that was added back to the caller
SELECT Numero_Pregunta, Numero_Boleta, Cultivo, Numero_Siembra, Detalle_Error
FROM   #tablaTemporal
1
toegevoegd

Als u een resultaat van een opgeslagen procedure in een permenante databasetabel wilt opslaan, kunt u het volgende doen:

INSERT INTO MyPermenantTable Execute [dbo].[paBltBuscarBoletasASA] parameter1, parameter2

Bovenstaande zoekopdracht werkte voor mij ... ik hoop dat het ook voor u werkt.

0
toegevoegd