2017-01-06 2 views
0

Ich habe eine vorhandene Tabelle, die in einer Datenbank residiert, und jeden Abend möchte ich alle Inhalte dieser vorhandenen Tabelle (TO_TABLE) mit allen Daten aus einer anderen Datenbank/Tabelle (FROM_TABLE) vollständig überschreiben.Wie verwende ich eine gespeicherte Prozedur, um eine vorhandene Tabelle vollständig zu überschreiben?

Derzeit bin ich fallen manuell die TO_TABLE und Umschreiben es mit diesem:

INTO SDE_SPATIAL.GISADMIN.TO_TABLE 
FROM GAVIN..AUTH.FROM_TABLE 

Dies funktioniert gut, aber ich würde schließlich diese in eine gespeicherte Prozedur umwandeln möchten und diese automatisch alle 24 Stunden passieren bekommen .

Kann jemand das oben genannte ein bisschen besser tun und bereit zu einer gespeicherten Prozedur?

UPDATE: Dies ist der Code, wie er derzeit steht. Ich habe diese zwei Fehler auftreten, wenn ich es ausführen, der erste war "Falsche Syntax in der Nähe von 'ON'" und der andere war "Falsche Syntax in der Nähe von 'END'". Ich entfernte die; Zeichen und führen Sie erneut, diesmal bekam ich keine Fehler, und die Prozedur wurde erfolgreich erstellt.

CREATE 
PROCEDURE [_ACC_OVERWRITE_PROPERTY_DETAILS] 
AS 
BEGIN 
    SET NOCOUNT ON 
    TRUNCATE TABLE 
     SDE_SPATIAL.GISADMIN._ACC_TEMP 
INSERT 
INTO 
    SDE_SPATIAL.GISADMIN._ACC_TEMP 
    (
     Parcel , 
     Assessment , 
     House , 
     Street , 
     St_Type , 
     Title , 
     Area , 
     Area_Units , 
     Suburb 
    ) 
SELECT 
    parc.pcl_num , 
    parc.ass_num , 
    STAD.HOU_NUM , 
    stad.str_nme , 
    stad.str_typ , 
    parc.fmt_ttl , 
    aps.property_area , 
    LOWER(aps.AREA_INDICATOR) + '²', 
    stad.sbr_nme 
FROM 
    GAVIN..AUTH.AUPRSTAD stad, 
    GAVIN..AUTH.AUSRMAST mast, 
    GAVIN..AUTH.AV_PROPERTY_SUMMARY aps, 
    GAVIN..AUTH.AUPRPARC parc 
WHERE 
    PARC.PCL_NUM=STAD.PCL_NUM 
AND STAD.STR_NUM=MAST.STR_NUM 
AND (
     PARC.PCL_FLG='R' 
    OR PARC.PCL_FLG='P') 
AND PARC.PCL_NUM=aps.PARCEL_NUMBER 
AND stad.SEQ_NUM = 0 
END 
+2

"Besser" wie? Ist etwas falsch mit der Art, wie Sie es tun? – Blorgbeard

+0

Nun, ich bin mit der rechten Maustaste und lasse die TO_TABLE jedes Mal, wenn ich es ausführe, kann ich stattdessen die TO_TABLE überschreiben? – Benno

+0

Sie können die Tabelle KÜRZEN oder LÖSCHEN, anstatt sie fallen zu lassen, aber das kann oder kann nicht besser sein. – Lucero

Antwort

1

Dies ist, wie ich es mit einer SQL Server gespeicherten Prozedur tun würde (sorry, aber ich glaube nicht, dass Sie Ihren speziellen SQL-Dialekt genannt):

CREATE PROCEDURE [ResetSpatialData] 
AS 
BEGIN 
    SET NOCOUNT ON; 
    TRUNCATE TABLE SDE_SPATIAL.GISADMIN.TO_TABLE; 
    INSERT INTO SDE_SPATIAL.GISADMIN.TO_TABLE 
    ([field1], [field2], [field3], [etc], [you get the idea]) 
    SELECT [field1], [field2], [field3], [etc], [you get the idea] 
    FROM GAVIN..AUTH.FROM_TABLE; 
END 

Sie könnten dies dann planen für Regelmäßige Ausführung auf Zeitbasis mithilfe eines SQL Server-Agent-Jobs.

Hinweis: korrigiert nach @Nick McDermaids Vorschlag.

+0

das sieht aus wie könnte es ein Gewinner sein ... wenn ich versuche, diesen Code ausgeführt bekomme ich die Fehler: Falsche Syntax in der Nähe 'ON' Es gibt bereits ein Objekt mit dem Namen 'TO_TABLE' – Benno

+0

Verwenden Sie SQL Server? Dies ist in SQL Server T-SQL-Sprache geschrieben. In Ihrer Frage wurde nicht angegeben, welches spezifische SQL-Datenbanksystem Sie verwenden. – STLDeveloper

+2

'SELECT INTO' geht davon aus, dass die Tabelle nicht existiert, so dass dies nicht funktioniert –

Verwandte Themen