Форум программистов, компьютерный форум, киберфорум
Наши страницы
Microsoft SQL Server
Войти
Регистрация
Восстановить пароль
 
hamin
246 / 234 / 164
Регистрация: 21.11.2012
Сообщений: 788
#1

Мигрирование данных из одной таблицы в несколько - SQL Server

10.10.2016, 16:43. Просмотров 260. Ответов 2
Метки нет (Все метки)

добрый день форумчане,

мне нужно из одной таблицы раскидать данные в 2 новые таблицы (см. картинку)

http://www.cyberforum.ru/sql-server/thread987527.html
т.е. по сути мне нужно вставить авторов в таблицу Avtor и вновь присвоенные id вставить в новую таблицу с книгами, т.е. если бы так можно было писать, то это было бы примерно так:


Кликните здесь для просмотра всего текста

SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
DECLARE @kniga TABLE 
(
    id INT NOT NULL PRIMARY KEY IDENTITY(1,1),
    kniga VARCHAR(50),
    Avtor VARCHAR(50),
    ISBN VARCHAR(50),
    vProkate bit
);
 
DECLARE @knigaNeu TABLE 
(
    id INT,
    kniga VARCHAR(50),
    idAvtor INT,
    ISBN VARCHAR(50),
    vProkate bit 
);
 
DECLARE @autor TABLE 
(
    idAvtor INT NOT NULL PRIMARY KEY IDENTITY(1,1),
    Name VARCHAR(50)
);
 
INSERT INTO @kniga VALUES ('idiot', 'Dostoevski', '324-4002-349', 1)
INSERT INTO @kniga VALUES ('Mu-Mu', 'Turgenev', '548-566-741-1', 0)
INSERT INTO @kniga VALUES ('Voina i Mir', 'Tolstoi', '014-124-3254', 1)


SQL
1
2
3
4
5
6
7
INSERT INTO @autor
output /*k.id, k.kniga,*/ inserted.idAvtor /*, k.ISBN, k.vProkate  */ INTO @knigaNeu
SELECT k.Avtor FROM @kniga k
 
SELECT * FROM @kniga
SELECT * FROM @autor
SELECT * FROM @knigaNeu
но так нельзя
можно ли вставить данные одним запросом? Как такое сделать лучше всего??
0
Миниатюры
Мигрирование данных из одной таблицы в несколько  
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.10.2016, 16:43
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Мигрирование данных из одной таблицы в несколько (SQL Server):

Несколько переменных из одной таблицы
Необходимо в хранимой процедуре получить значения нескольких переменных из...

Перенос данных из одной таблицы в другую
Имеется две таблицы. Необходимо перенести данные из второй таблицы в первую....

Копирование данных с одной таблицы в другую
Подскажите пожалуйста запрос на копирование данных с одной таблицы в другую,...

Копирование данных из одной таблицы используя курсоры
Добрый вечер. Передо мной стоит такая задача: есть одна таблица(табл1) с...

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

2
invm
1816 / 1226 / 349
Регистрация: 02.06.2013
Сообщений: 3,076
10.10.2016, 17:44 #2
Цитата Сообщение от hamin Посмотреть сообщение
можно ли вставить данные одним запросом?
Нельзя.
Цитата Сообщение от hamin Посмотреть сообщение
Как такое сделать лучше всего??
T-SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
insert into @autor
select distinct Avtor from @kniga;
 
insert into @knigaNeu
 (id, kniga, idAvtor, ISBN, vProkate)
 select
  a.id, a.kniga, b.idAvtor, a.ISBN, a.vProkate
 from
  @kniga a join
  @autor b on b.Name = a.Avtor;
 
select * from @autor;
select * from @knigaNeu;
1
hamin
246 / 234 / 164
Регистрация: 21.11.2012
Сообщений: 788
11.10.2016, 11:25  [ТС] #3
invm,

жаль, спасибо за ответ

Добавлено через 17 часов 36 минут
invm,

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

SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
DECLARE @id INT
DECLARE @knigaInfo VARCHAR(50)
DECLARE @Avtor VARCHAR(50)
DECLARE @ISBN VARCHAR(50)
DECLARE @vProkate bit
DECLARE @idNEW INT
 
 
    DECLARE db_cursor CURSOR FOR  
    SELECT k.id, k.kniga, k.Avtor, k.ISBN, k.vProkate 
    FROM @kniga k
 
    OPEN db_cursor   
    FETCH NEXT FROM db_cursor INTO @id, @knigaInfo, @Avtor, @ISBN, @vProkate
 
    WHILE @@FETCH_STATUS = 0   
    BEGIN   
    
           INSERT INTO @autor VALUES (@Avtor)
            
           SET @idNEW = SCOPE_IDENTITY()
           
           INSERT INTO @knigaNeu VALUES (@id, @knigaInfo, @idNEW, @ISBN, @vProkate)
           
           FETCH NEXT FROM db_cursor INTO @id, @knigaInfo, @Avtor, @ISBN, @vProkate  
    END   
 
    CLOSE db_cursor   
    DEALLOCATE db_cursor 
 
SELECT * FROM @knigaNeu
SELECT * FROM @autor
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.10.2016, 11:25
Привет! Вот еще темы с решениями:

Запрос для вставки данных из поля одной таблицы в поле другой
Подскажите, как с помощью запроса вставить данные из поля Код_квитанции таблицы...

Как скопировать таблицы и хранимые процедуры из одной базы данных в другую?
На сайте использую собственную базу данных SQL Server, однако модуль членства,...

Замена значений в поле одной таблицы на значение из другой таблицы
Добрый всем день,прошу помощи,так как не силён в программировании, суть вот в...

Как удалит из одной таблицы одновременно появилось в другом таблицы
Привет всем помогите пожалуйста как мне сделать чтобы из одной таблицы когда...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru