Stored procedures 如何使用存储过程完全覆盖现有表?
我有一个驻留在一个数据库中的现有表,每天晚上我都想用另一个数据库/表(从_表)中的所有数据完全覆盖这个现有表(到_表)的所有内容 目前,我正在手动删除TO_表,并使用以下命令重新写入它: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小时自动发生一次 是否有人知道如何更好地执行上述操作并为存储过程做好准备 更新: 这是目前的代码。我在运行它时发现了这两个错误,
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年前)中,旧式的逗号分隔表列表样式被正确的ANSIJOIN
语法所取代,它的使用受到了阻碍,看起来它可能是一个赢家。。。当我尝试运行该代码时,会出现错误:“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