复制数据库中的所有表并添加新数据,而不影响旧数据SQL
有谁能帮我介绍一个存储过程,该存储过程允许复制数据库中的所有表,并且在结束时必须截断原始表,并且当该过程每天运行时,必须将所有新数据从原始表复制到备份表,而不影响现有数据 这就是我所做的复制数据库中的所有表并添加新数据,而不影响旧数据SQL,sql,sql-server,database,sql-server-2014,Sql,Sql Server,Database,Sql Server 2014,有谁能帮我介绍一个存储过程,该存储过程允许复制数据库中的所有表,并且在结束时必须截断原始表,并且当该过程每天运行时,必须将所有新数据从原始表复制到备份表,而不影响现有数据 这就是我所做的 CREATE PROCEDURE ZS_Backup AS BEGIN SELECT * INTO [dbo].[CS_ArrivalsBackUp], [dbo].[CS_awbBackUp], [dbo].[CS_awb_arrivalsBackUp], [dbo].[CS_awb_dlvBac
CREATE PROCEDURE ZS_Backup
AS
BEGIN
SELECT * INTO
[dbo].[CS_ArrivalsBackUp],
[dbo].[CS_awbBackUp],
[dbo].[CS_awb_arrivalsBackUp],
[dbo].[CS_awb_dlvBackUp],
[dbo].[CS_awb_iataBackUp],
[dbo].[CS_awb_iata_arrivalsBackUp],
[dbo].[CS_ConsolidationBackUp],
[dbo].[CS_part_agents],
[dbo].[CS_part_consignee],
[dbo].[Evo_Customers],
[dbo].[Evo_Products],
[dbo].[int_log_arrivals],
[dbo].[int_log_deliveries],
[dbo].[integration_logs],
[dbo].[period],
[dbo].[public_holidays],
[dbo].[rates],
[dbo].[temp_Rates]
FROM [dbo].[CS_Arrivals],
[dbo].[CS_awb],
[dbo].[CS_awb_arrivals],
[dbo].[CS_awb_dlv],
[dbo].[CS_awb_iata],
[dbo].[CS_awb_iata_arrivals],
[dbo].[CS_Consolidation],
[dbo].[CS_part_agents],
[dbo].[CS_part_consignee],
[dbo].[Evo_Customers],
[dbo].[Evo_Products],
[dbo].[int_log_arrivals],
[dbo].[int_log_deliveries],
[dbo].[integration_logs],
[dbo].[period],
[dbo].[public_holidays],
[dbo].[rates],
[dbo].[temp_Rates]
TRUNCATE TABLE [dbo].[CS_Arrivals],
[dbo].[CS_awb],
[dbo].[CS_awb_arrivals],
[dbo].[CS_awb_dlv],
[dbo].[CS_awb_iata],
[dbo].[CS_awb_iata_arrivals],
[dbo].[CS_Consolidation],
[dbo].[CS_part_agents],
[dbo].[CS_part_consignee],
[dbo].[Evo_Customers],
[dbo].[Evo_Products],
[dbo].[int_log_arrivals],
[dbo].[int_log_deliveries],
[dbo].[integration_logs],
[dbo].[period],
[dbo].[public_holidays],
[dbo].[rates],
[dbo].[temp_Rates]
END
GO
给你
在你运行这个的地方要小心。为了您的安全,我已注释掉了实际执行复制和截断的位,但我已将其设置为显示将执行的内容:
DECLARE @table_name nvarchar(1000)
DECLARE @SQL nvarchar(1000)
DECLARE CUR CURSOR
FOR
SELECT name
FROM sys.tables
WHERE type = 'U'
and name IN ('CS_ArrivalsBackUp',
'CS_awbBackUp',
'CS_awb_arrivalsBackUp',
'CS_awb_dlvBackUp',
'CS_awb_iataBackUp',
'CS_awb_iata_arrivalsBackUp',
'CS_ConsolidationBackUp',
'CS_part_agents',
'CS_part_consignee',
'Evo_Customers',
'Evo_Products',
'int_log_arrivals',
'int_log_deliveries',
'integration_logs',
'period',
'public_holidays',
'rates',
'temp_Rates')
ORDER BY NAME
OPEN CUR
FETCH NEXT FROM CUR
INTO @table_name
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT 'SELECT * INTO TMP_' + @table_name + ' FROM ' + @table_name
PRINT 'TRUNCATE TABLE ' + @table_name
--SET @SQL = 'SELECT * INTO TMP_' + @table_name + ' FROM ' + @table_name
--EXEC (@SQL)
--SET @SQL = 'TRUNCATE TABLE ' + @table_name
--EXEC (@SQL)
FETCH NEXT FROM CUR INTO @table_name
END
CLOSE CUR
DEALLOCATE CUR
给你
在你运行这个的地方要小心。为了您的安全,我已注释掉了实际执行复制和截断的位,但我已将其设置为显示将执行的内容:
DECLARE @table_name nvarchar(1000)
DECLARE @SQL nvarchar(1000)
DECLARE CUR CURSOR
FOR
SELECT name
FROM sys.tables
WHERE type = 'U'
and name IN ('CS_ArrivalsBackUp',
'CS_awbBackUp',
'CS_awb_arrivalsBackUp',
'CS_awb_dlvBackUp',
'CS_awb_iataBackUp',
'CS_awb_iata_arrivalsBackUp',
'CS_ConsolidationBackUp',
'CS_part_agents',
'CS_part_consignee',
'Evo_Customers',
'Evo_Products',
'int_log_arrivals',
'int_log_deliveries',
'integration_logs',
'period',
'public_holidays',
'rates',
'temp_Rates')
ORDER BY NAME
OPEN CUR
FETCH NEXT FROM CUR
INTO @table_name
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT 'SELECT * INTO TMP_' + @table_name + ' FROM ' + @table_name
PRINT 'TRUNCATE TABLE ' + @table_name
--SET @SQL = 'SELECT * INTO TMP_' + @table_name + ' FROM ' + @table_name
--EXEC (@SQL)
--SET @SQL = 'TRUNCATE TABLE ' + @table_name
--EXEC (@SQL)
FETCH NEXT FROM CUR INTO @table_name
END
CLOSE CUR
DEALLOCATE CUR
好的,只需要稍微改变一下。创建临时表后(在第一次运行时);那么,对于未来的跑步,您需要:
DECLARE @table_name nvarchar(1000)
DECLARE @SQL nvarchar(1000)
DECLARE CUR CURSOR
FOR
SELECT name
FROM sys.tables
WHERE type = 'U'
and name IN ('CS_ArrivalsBackUp',
'CS_awbBackUp',
'CS_awb_arrivalsBackUp',
'CS_awb_dlvBackUp',
'CS_awb_iataBackUp',
'CS_awb_iata_arrivalsBackUp',
'CS_ConsolidationBackUp',
'CS_part_agents',
'CS_part_consignee',
'Evo_Customers',
'Evo_Products',
'int_log_arrivals',
'int_log_deliveries',
'integration_logs',
'period',
'public_holidays',
'rates',
'temp_Rates')
ORDER BY NAME
OPEN CUR
FETCH NEXT FROM CUR
INTO @table_name
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT 'INSERT INTO TMP_' + @table_name + ' SELECT * FROM_' + @table_name
PRINT 'TRUNCATE TABLE ' + @table_name
--SET @SQL = 'INSERT INTO TMP_' + @table_name + ' SELECT * FROM_' + @table_name
--EXEC (@SQL)
--SET @SQL = 'TRUNCATE TABLE ' + @table_name
--EXEC (@SQL)
FETCH NEXT FROM CUR INTO @table_name
END
CLOSE CUR
DEALLOCATE CUR
好的,只需要稍微改变一下。创建临时表后(在第一次运行时);那么,对于未来的跑步,您需要:
DECLARE @table_name nvarchar(1000)
DECLARE @SQL nvarchar(1000)
DECLARE CUR CURSOR
FOR
SELECT name
FROM sys.tables
WHERE type = 'U'
and name IN ('CS_ArrivalsBackUp',
'CS_awbBackUp',
'CS_awb_arrivalsBackUp',
'CS_awb_dlvBackUp',
'CS_awb_iataBackUp',
'CS_awb_iata_arrivalsBackUp',
'CS_ConsolidationBackUp',
'CS_part_agents',
'CS_part_consignee',
'Evo_Customers',
'Evo_Products',
'int_log_arrivals',
'int_log_deliveries',
'integration_logs',
'period',
'public_holidays',
'rates',
'temp_Rates')
ORDER BY NAME
OPEN CUR
FETCH NEXT FROM CUR
INTO @table_name
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT 'INSERT INTO TMP_' + @table_name + ' SELECT * FROM_' + @table_name
PRINT 'TRUNCATE TABLE ' + @table_name
--SET @SQL = 'INSERT INTO TMP_' + @table_name + ' SELECT * FROM_' + @table_name
--EXEC (@SQL)
--SET @SQL = 'TRUNCATE TABLE ' + @table_name
--EXEC (@SQL)
FETCH NEXT FROM CUR INTO @table_name
END
CLOSE CUR
DEALLOCATE CUR
你的问题的答案可能是多种多样的。有许多体系结构和模型可以做到这一点。问题是你的试用期是什么或者你计划了什么?你的问题的答案可以是各种类型的。有许多体系结构和模型可以做到这一点。问题是您的试用期是什么,或者您计划了什么?我不断收到这些错误:Msg 2812,级别16,状态62,过程CopyAndTruncateTables,第28行找不到存储过程“SELECT*INTO TMP\U CS\U Arrivals FROM CS\U Arrivals”。Msg 2812,级别16,状态62,过程CopyAndTruncateTables,第31行找不到存储过程“TRUNCATE TABLE CS_Arrivals”。Msg 2812,级别16,状态62,过程CopyAndTruncateTables,第28行找不到存储过程“SELECT*INTO TMP_CS_awb FROM CS_awb”。好的,我已经更新了代码,这现在只是一条语句,不是存储过程。运行它并查看返回的内容Msg 2812,级别16,状态62,第41行找不到存储过程“从CS_到达选择*进入TMP_CS_到达”。Msg 2812,级别16,状态62,第44行找不到存储过程“TRUNCATE TABLE CS_Arrivals”。Msg 2812,级别16,状态62,第41行没有存储过程。。。我已经更改了上面的代码,您是否已将上面的代码复制并粘贴到新窗口中?i、 e.代码以“DECLARE@table_name nvarchar(1000)”开头,以“DEALLOCATE CUR”结尾。嗨,我已经运行了它,它可以100%工作。谢谢,现在唯一的问题是每天都需要将新数据复制到这些表中。在不替换现有数据的情况下,我不断收到以下错误:Msg 2812,级别16,状态62,过程CopyAndTruncateTables,第28行找不到存储过程“SELECT*INTO TMP_CS_Arrivals FROM CS_Arrivals”。Msg 2812,级别16,状态62,过程CopyAndTruncateTables,第31行找不到存储过程“TRUNCATE TABLE CS_Arrivals”。Msg 2812,级别16,状态62,过程CopyAndTruncateTables,第28行找不到存储过程“SELECT*INTO TMP_CS_awb FROM CS_awb”。好的,我已经更新了代码,这现在只是一条语句,不是存储过程。运行它并查看返回的内容Msg 2812,级别16,状态62,第41行找不到存储过程“从CS_到达选择*进入TMP_CS_到达”。Msg 2812,级别16,状态62,第44行找不到存储过程“TRUNCATE TABLE CS_Arrivals”。Msg 2812,级别16,状态62,第41行没有存储过程。。。我已经更改了上面的代码,您是否已将上面的代码复制并粘贴到新窗口中?i、 e.代码以“DECLARE@table_name nvarchar(1000)”开头,以“DEALLOCATE CUR”结尾。嗨,我已经运行了它,它可以100%工作。谢谢,现在唯一的问题是每天都需要将新数据复制到这些表中。没有替换现有数据。您好,抱歉,您在第二次查询中更改了什么?从:选择*到TMP_uu到:插入到TMP_u非常感谢,非常感谢您好,您在第二次查询中更改了什么?从:选择*到TMP_u到:插入到TMP_u非常感谢,非常感谢