Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
复制数据库中的所有表并添加新数据,而不影响旧数据SQL_Sql_Sql Server_Database_Sql Server 2014 - Fatal编程技术网

复制数据库中的所有表并添加新数据,而不影响旧数据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非常感谢,非常感谢