如果您在database1中说过表Contacts
,并且想要将ContactID=123
复制到database2。复制所有列(我认为除ID
除外)假设两个数据库和相同模式中都存在Contacts表。两个数据库也在同一服务器中。
漫长的方法是列出insert语句中的每一列,但有没有列出所有列的方法?或者至少自动获取所有列。
我正在研究SQL Server 2012
我试过了:
SELECT * into [database2].[dbo].[Contacts] from [database1].[dbo].[Contacts] where [ContactsID]=123
但得到了错误:
数据库中已有一个名为“Contacts”的对象。
答案 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;