Вставка строк из одной таблицы базы данных в две разные таблицы в другой базе данных - PullRequest
0 голосов
/ 29 марта 2020

Мне нужно добавить около 600 записей из одной базы данных в другую.

Первая часть вставляется из выбора, подобного этому:

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

Здесь все становится сложно, и я не знаю, как это сделать.

Поэтому для каждой строки, вставленной выше, мне нужно также вставить связанные данные в другую таблицу.

Выше NEWID() будет использоваться для вставки строка, а затем мне нужно будет вставить starCoordinates из AISourceMapper.dbo.radioSignals, и это будет выглядеть примерно так:

INSERT INTO RelayMapper.dbo.radioSources(CstarID, starCoordinates,  isVerified)
VALUES('1150C651-5D9A-4C13-9BE7-EF4AZ2549112', 'R.A. 13h 27m, DEC. -47deg, 29m', 1)

starCoordinates также из той же таблицы и строки, что и я m ВЫБОР из (AISourceMapper.dbo.radioSignals)

Есть ли способ сделать что-то подобное?

Ответы [ 2 ]

2 голосов
/ 30 марта 2020

Один из вариантов - скопировать все данные из AISourceMapper.dbo.radioSignals во временную таблицу и одновременно назначить GUIDS, а затем вставить из этой таблицы в таблицы назначения.

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
1 голос
/ 30 марта 2020

Вы можете использовать предложение OUTPUT, чтобы получить вставленные значения, а затем использовать их для вставки в другую таблицу.

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;
...