#sql #sql-server #import
#sql #sql-server #импорт
Вопрос:
Мне нужно импортировать данные из старой схемы в новую, где столбец ‘career_name’ (в таблице ‘users’), который раньше был VARCHAR
, теперь должен быть INTEGER
, который является внешним ключом к другой таблице careers
. Таким образом, я намерен уточнить данные, которые были сохранены в VARCHAR
столбце, чтобы сохранить целостность в моей базе данных.
На самом деле, я делаю следующее:
- Создайте обе новые таблицы в новой схеме
- Используйте
SELECT DISTINCT 'career_name' FROM old_table
для получения всех возможных значений INSERT
в моей новой таблицеcareers
строки, полученные вышеINSERT
данные в мою новую таблицуusers
с использованием предложения CASE, чтобы получить идентификатор из таблицыcareers
соответствующего первогоcareer_name
, чтобы создать связь.
Теперь проблема заключается в следующем: таблица careers
большая, поэтому написать одно предложение CASE для каждой строки в таблице для импорта users
практически невозможно.
Есть ли способ избежать этого? Я хотел бы использовать свою таблицу careers
в качестве ассоциативного массива, где ключом был первый career_name
, а значением — идентификатор строки… Спасибо!
Комментарии:
1. Это кажется простым. Почему вы не можете просто объединить старые данные с новой таблицей карьеры, чтобы получить идентификатор?
Ответ №1:
INSERT into new_Users
SELECT Users.Name, careers.id
FROM Users inner join careers ON Users.career_name = careers.career_name
Поскольку схема мне неизвестна, я предполагаю, что в таблице new_users есть 2 столбца: name и career_id.
Ответ №2:
Есть ли способ избежать этого? Я хотел бы использовать свою таблицу ‘careers’ в качестве ассоциативного массива, где ключом было прежнее ‘career_name’, а значением — идентификатор строки… Спасибо!
Er… Это и есть таблица, не так ли? Просто присоединитесь к своей новой таблице карьеры, чтобы использовать ее в качестве подстановки при выполнении вставки:
INSERT INTO users (blah, whatever, career_id)
SELECT
old_users_table.blah,
old_users_table.whatever,
careers.career_id
FROM
old_users_table INNER JOIN careers ON old_users_table.career_name = careers.career_name
… где users
находится ваша новая таблица users, old_users_table
где вы получаете данные, которые хотите перенести, и careers
ваша новая таблица карьеры.