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

Stored procedures 如何使用存储过程完全覆盖现有表?,stored-procedures,sql-server-2012,Stored Procedures,Sql Server 2012,我有一个驻留在一个数据库中的现有表,每天晚上我都想用另一个数据库/表(从_表)中的所有数据完全覆盖这个现有表(到_表)的所有内容 目前,我正在手动删除TO_表,并使用以下命令重新写入它: INTO SDE_SPATIAL.GISADMIN.TO_TABLE FROM GAVIN..AUTH.FROM_TABLE 这很好,但我最终希望将其转换为一个存储过程,并使其每24小时自动发生一次 是否有人知道如何更好地执行上述操作并为存储过程做好准备 更新: 这是目前的代码。我在运行它时发现了这两个错误,

我有一个驻留在一个数据库中的现有表,每天晚上我都想用另一个数据库/表(从_表)中的所有数据完全覆盖这个现有表(到_表)的所有内容

目前,我正在手动删除TO_表,并使用以下命令重新写入它:

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

这就是使用SQL Server存储过程的方法(对不起,我认为您没有指定特定的SQL方言):

然后,您可以通过使用SQLServer代理作业来安排定期执行


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

如何“更好”?您的操作方式是否有问题?每次运行时,我都会右键单击并删除TO_表,是否可以覆盖TO_表?您可以截断或删除该表而不是删除它,但这可能会更好,也可能不会更好。您的过程看起来不错,但是,当然,我无法评估它是否正确,因为我不知道各种数据库的模式。您已经指出仍然会出现错误。请在尝试运行
创建过程时附上错误文本
?-在ANSI-92 SQL标准(25年前)中,旧式的逗号分隔表列表样式被正确的ANSI
JOIN
语法所取代,它的使用受到了阻碍,看起来它可能是一个赢家。。。当我尝试运行该代码时,会出现错误:“ON”附近的语法不正确已经有一个名为“TO_TABLE”的对象。您在使用SQL Server吗?这是用SQLServerT-SQL语言编写的。您的问题没有说明您正在使用的特定SQL数据库系统。
SELECT-INTO
假定该表不存在,因此不会出现此问题work@Nick.McDermaid-你说得对,先生。已经进行了更正。我可以再提一个建议吗:请始终在插入和选择端包含列名(我意识到没有提供列名),而且最好包含包含加载数据的日期时间列。真正有助于排除故障。
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