Вопрос видоизменился - опубликованный код работает нормально, это альтернативы.
Способ с одним утверждением, в котором вы передаете два параметра, @User и @Location:
INSERT INTO TableB (UserKey, LocationKey)
SELECT (userKey, LocationKey)
FROM
(
(select pk_id as userKey, user from TableA) x
cross join
(select pk_id as LocationKey, Location from TableC) y
WHERE user = @user and location = @location
)
Если пользователь уникален в таблице A, а местоположение уникально в таблице C, будет вставлена одна запись в таблицу B.
Отредактировано для добавления:
Выше будет делать это в одном утверждении, но дополнительная сложность ничего не дает.Лучше сделать это так:
Добавьте уникальный ключ в TableB:
pk_id int IDENTITY
Затем сделайте вставку следующим образом:
declare @newID int
INSERT INTO TableB (UserKey)
SELECT pk_id from TableA where user = @user
SELECT @newID = SCOPE_IDENTITY() -- retrieves the new key value
UPDATE TableB set LocationKey =
(SELECT pk_id from TableC WHERE location = @location)
WHERE pk_id = @newID