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



如果您在database1中有表Contacts,并且您想将ContactID=123复制到database2。复制所有列(除了ID我猜)假设联系人表存在于两个数据库和相同的模式。而且两个数据库都在同一个服务器上。

列出插入语句中的每一列,但是有没有一种不列出所有列的方法?或者至少自动获取所有列。

我正在看SQL Server 2012

I tried:

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

but got error:

数据库中已经有一个名为"Contacts"的对象。

比如

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)

如果'Id'是一个标识列,并且你想在插入中包含它,只需为你要插入的表设置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

您可以不指定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;

最新更新