将一个数据库 table 中的行插入到另一个数据库中的两个不同 table 中
Inserting rows from one database table into two different tables in another database
我需要将大约 600 条记录从一个数据库添加到另一个数据库。
第一部分像这样从 select 插入:
INSERT INTO RelayMapper.dbo.radioSignals(CstarID, StarName, SystemName, StarSystemCount, SuperNova, DateCreated)
SELECT NEWID(), startName, systemName, 1, 1, getDate()
FROM AISourceMapper.dbo.radioSignals
WHERE rangeICW = 5
这就是它变得棘手的地方,我不知道该怎么做。
所以对于上面插入的每一行,我还需要将相关数据插入到另一个table。
上面的 NEWID()
将用于插入一行,然后我还需要从 AISourceMapper.dbo.radioSignals
插入 starCoordinates
,它看起来像这样:
INSERT INTO RelayMapper.dbo.radioSources(CstarID, starCoordinates, isVerified)
VALUES('1150C651-5D9A-4C13-9BE7-EF4AZ2549112', 'R.A. 13h 27m, DEC. -47deg, 29m', 1)
starCoordinates
也来自相同的 table 和我从中选择的行 (AISourceMapper.dbo.radioSignals)
有没有办法做这样的事情?
一个选项是将所有数据从 AISourceMapper.dbo.radioSignals
复制到一个临时文件 table 中,同时分配 GUID,然后从这个 table 插入您的目标 tables.
SELECT NEWID() AS CstarID, *
INTO #TempTable
FROM AISourceMapper.dbo.radioSignals
WHERE rangeICW = 5
INSERT INTO RelayMapper.dbo.radioSignals( CstarID, StarName, SystemName, StarSystemCount, SuperNova, DateCreated )
SELECT CstarID, startName, systemName, 1, 1, getDate()
FROM #TempTable
INSERT INTO RelayMapper.dbo.radioSources( CstarID, starCoordinates, isVerified )
SELECT CstarID, starCoordinates, isVerified
FROM #TempTable
您可以使用 OUTPUT 子句获取插入的值,然后使用它们插入另一个 table。
DECLARE @insertedId TABLE(CStartID UNIQUEIDENTIFIER)
INSERT INTO RelayMapper.dbo.radioSignals(CstarID, StarName, SystemName, StarSystemCount, SuperNova, DateCreated)
OUTPUT inserted.CStarID INTO @insertedId
SELECT NEWID(), startName, systemName, 1, 1, getDate()
FROM AISourceMapper.dbo.radioSignals
WHERE rangeICW = 5;
--with values clause
INSERT INTO RelayMapper.dbo.radioSources(CstarID, starCoordinates, isVerified)
SELECT CStarId
'R.A. 13h 27m, DEC. -47deg, 29m', 1
FROM @insertedId;
--WITH select clause
INSERT INTO RelayMapper.dbo.radioSources(CstarID, starCoordinates, isVerified)
SELECT i.CStarId, rs.starCoordinates, 1
FROM AISourceMapper.dbo.radioSignals AS rs
CROSS JOIN @insertedId AS i
WHERE rs.rangeICW = 5;
我需要将大约 600 条记录从一个数据库添加到另一个数据库。
第一部分像这样从 select 插入:
INSERT INTO RelayMapper.dbo.radioSignals(CstarID, StarName, SystemName, StarSystemCount, SuperNova, DateCreated)
SELECT NEWID(), startName, systemName, 1, 1, getDate()
FROM AISourceMapper.dbo.radioSignals
WHERE rangeICW = 5
这就是它变得棘手的地方,我不知道该怎么做。
所以对于上面插入的每一行,我还需要将相关数据插入到另一个table。
上面的 NEWID()
将用于插入一行,然后我还需要从 AISourceMapper.dbo.radioSignals
插入 starCoordinates
,它看起来像这样:
INSERT INTO RelayMapper.dbo.radioSources(CstarID, starCoordinates, isVerified)
VALUES('1150C651-5D9A-4C13-9BE7-EF4AZ2549112', 'R.A. 13h 27m, DEC. -47deg, 29m', 1)
starCoordinates
也来自相同的 table 和我从中选择的行 (AISourceMapper.dbo.radioSignals)
有没有办法做这样的事情?
一个选项是将所有数据从 AISourceMapper.dbo.radioSignals
复制到一个临时文件 table 中,同时分配 GUID,然后从这个 table 插入您的目标 tables.
SELECT NEWID() AS CstarID, *
INTO #TempTable
FROM AISourceMapper.dbo.radioSignals
WHERE rangeICW = 5
INSERT INTO RelayMapper.dbo.radioSignals( CstarID, StarName, SystemName, StarSystemCount, SuperNova, DateCreated )
SELECT CstarID, startName, systemName, 1, 1, getDate()
FROM #TempTable
INSERT INTO RelayMapper.dbo.radioSources( CstarID, starCoordinates, isVerified )
SELECT CstarID, starCoordinates, isVerified
FROM #TempTable
您可以使用 OUTPUT 子句获取插入的值,然后使用它们插入另一个 table。
DECLARE @insertedId TABLE(CStartID UNIQUEIDENTIFIER)
INSERT INTO RelayMapper.dbo.radioSignals(CstarID, StarName, SystemName, StarSystemCount, SuperNova, DateCreated)
OUTPUT inserted.CStarID INTO @insertedId
SELECT NEWID(), startName, systemName, 1, 1, getDate()
FROM AISourceMapper.dbo.radioSignals
WHERE rangeICW = 5;
--with values clause
INSERT INTO RelayMapper.dbo.radioSources(CstarID, starCoordinates, isVerified)
SELECT CStarId
'R.A. 13h 27m, DEC. -47deg, 29m', 1
FROM @insertedId;
--WITH select clause
INSERT INTO RelayMapper.dbo.radioSources(CstarID, starCoordinates, isVerified)
SELECT i.CStarId, rs.starCoordinates, 1
FROM AISourceMapper.dbo.radioSignals AS rs
CROSS JOIN @insertedId AS i
WHERE rs.rangeICW = 5;