我有一个驻留在一个数据库中的现有表,每晚我想用另一个数据库/表(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
答案 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的建议更正。