如何使用存储过程完全覆盖现有表?

时间:2017-01-06 01:40:51

标签: stored-procedures sql-server-2012

我有一个驻留在一个数据库中的现有表,每晚我想用另一个数据库/表(FROM_TABLE)中的所有数据完全覆盖此现有表(TO_TABLE)的所有内容。

目前我手动删除TO_TABLE并使用它重写它:

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

这样可以正常工作,但我最终希望将其转换为存储过程,并且每24小时自动执行一次。

有谁知道如何更好地完成上述操作并为存储过程做好准备?

更新: 这是目前的代码。我运行它时发生了这两个错误,第一个是“ON'附近的语法不正确”,另一个是“END'附近的语法不正确”。 我删除了;字符并再次运行,这次我没有收到任何错误,并且正在成功创建该过程。

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

1 个答案:

答案 0 :(得分:1)

这就是我使用SQL Server存储过程的方法(对不起,但我不认为你将你的特定SQL方言命名):

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

然后,您可以使用SQL Server代理作业在一段时间内为此定期执行进行计划。

注意:根据@Nick McDermaid的建议更正。