Я бы хотел, чтобы запрос, который в простейшем случае объединял бы 2 таблицы вместе, и никакие другие экспресс-отношения, кроме каждой строки в том, что я назову таблицей «пул», не совпадет точно с 1 строкой в моей другой таблице. Мне все равно, какая строка, я просто хочу, чтобы каждая строка в моей основной таблице получала одну строку из таблицы «пул», и знаю, что каждая строка из пула будет использоваться только один раз.
Я думал, что что-то вроде ROW_NUMBER () OVER () можно использовать для сопоставления с произвольным номером строки, что было бы хорошо, но я думаю, что требуется как минимум 2 внутренних поставщика набора строк; Я думал, что будет что-то попроще.
Чтобы поставить задачу более кратко, у вас есть таблица идентификаторов, и вы хотите объединить ее с таблицей записей, чтобы назначить идентификаторы. Вы можете использовать каждый идентификатор только один раз. Какую структуру запроса или объединения вы можете использовать для возврата набора строк всех записей, каждой из которых присвоен идентификатор. Не имеет значения, какая запись получает какой идентификатор, только то, что каждый идентификатор может использоваться только один раз.
Фон
Для тех из вас, кто интересуется фоном, у меня есть логическая сущность, которая состоит из строки заголовка в таблице заголовков, которая является общей для множества объектов, которая дает нам свой идентификатор, а затем запись в сущности. конкретная таблица. Я использую запрос, подобный следующему, чтобы предварительно создать группу идентификаторов в таблице заголовков:
declare @idsTable TABLE(ID INT);
INSERT INTO Header (HeaderType)
OUTPUT INSERTED.id INTO @idsTable
SELECT 4 as HeaderType
FROM Company c WHERE c.CompanyType = 12;
На данный момент у меня есть несколько строк заголовков и идентификаторов (IDENTITY), которые были назначены на строки. Теперь я хочу использовать аналогичную INSERT для конкретной таблицы объектов, но мне нужно сопоставить идентификатор из @idsTable только с 1 строкой в моем запросе выбора (и, следовательно, в моем запросе вставки). Что-то вроде:
INSERT INTO Specific (HeaderiD, Value1, ...)
SELECT *
FROM @idsTable
JOIN RecordsToWrite r2r ON ???