是否有一种优雅的方法可以将整个行从一个数据库复制到另一个具有相同模式的

时间:2015-06-09 19:49:05

标签: sql sql-server

如果您在database1中说过表Contacts,并且想要将ContactID=123复制到database2。复制所有列(我认为除ID除外)假设两个数据库和相同模式中都存在Contacts表。两个数据库也在同一服务器中。

漫长的方法是列出insert语句中的每一列,但有没有列出所有列的方法?或者至少自动获取所有列。

我正在研究SQL Server 2012

我试过了:

SELECT * into [database2].[dbo].[Contacts] from [database1].[dbo].[Contacts] where [ContactsID]=123

但得到了错误:

  

数据库中已有一个名为“Contacts”的对象。

2 个答案:

答案 0 :(得分:3)

也许像

DECLARE @Sql VARCHAR(MAX),
        @COLUMNS VARCHAR(MAX)
SELECT @COLUMNS = COALESCE(@COLUMNS + ',', '') + COLUMN_NAME
FROM Database1.INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = N'Contacts' AND COLUMN_NAME <> 'Id'

SET @Sql = CONCAT('INSERT INTO Database2.dbo.Contacts',
                'SELECT ', @COLUMNS, ' FROM Database1.dbo.Contacts WHERE Id = 123')
EXEC (@Sql)

如果&#39; Id&#39;是一个标识列,并且您希望将它包含在插入中,只需为要插入的表格设置Identity_Insert

SET IDENTITY_INSERT Database2.dbo.Contacts ON

然后从Database1

插入*
Insert Into Database2.dbo.Contacts 
Select * From Database1.dbo.Contacts Where Id = 123

然后关闭表格的Identity_Insert

SET IDENTITY_INSERT Database2.dbo.Contacts OFF

答案 1 :(得分:0)

你可以不指定colls,然后更新id:

DECLARE @newId int = 1;
INSERT INTO newTable SELECT * FROM initial_Table WHERE initial_Table.ContactsID=123;
UPDATE newTable SET ContactsID=@newId WHERE ContactsID=123;