我想要合并两个表 - SomeTable_1和SomeTable_2。它们具有相同的列,来自不同的DB(SomeDB_1 / SomeDB_2)。
所以我从另一个DB(SomeDB)中的空白表(SomeTable)开始,并开始合并上述表中的数据。
//get a remote bash shell on server: MANAGEMENT_NAGIOS_SERVER
$shell = \MTS\Factories::getDevices()->getRemoteHost(MANAGEMENT_NAGIOS_SERVER)->getShellBySsh(MANAGEMENT_NAGIOS_USER, 'secretPassword');
//execute the ls command (--color=none to avoid special chars from terminal colors)
$return1 = $shell->exeCmd('ls --color=none /usr/local/nagios/health_check_${CARRIER}.cfg');
echo $return1; //ls return
一切正常,但表逻辑基于ID(主键),当我按照上述方法合并两个表时,我得到两个重复记录(具有相同的ID)。有什么办法可以解决这个问题吗?非常感谢。
答案 0 :(得分:1)
Tou可以这样做:
而不是使用*,您可以设置列名,避免使用id列。
INSERT INTO [SomeDB].[dbo].[SomeTable] (column1, column2, column3...) SELECT column1, column2, column3 , ... FROM [SomeDB_1].[dbo].[SomeTable_1];
INSERT INTO [SomeDB].[dbo].[SomeTable] (column1, column2, column3...) SELECT column1, column2, column3 , ...FROM [SomeDB_2].[dbo].[SomeTable_2];
确保将SomeTable
中的id列设置为自动增量。
答案 1 :(得分:0)
使用可以使用以下代码。它允许将数据插入 IDENTITY COLUMN 。这适用于SQL Server 2012
SET IDENTITY_INSERT [SomeDB].[dbo].[SomeTable] ON
INSERT INTO [SomeDB].[dbo].[SomeTable] SELECT * FROM [SomeDB_1].[dbo].[SomeTable_1];
INSERT INTO [SomeDB].[dbo].[SomeTable] SELECT * FROM [SomeDB_2].[dbo].[SomeTable_2];
SET IDENTITY_INSERT [SomeDB].[dbo].[SomeTable] OFF