Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 UPDATE таблицы из файла cvs. msqsl 2008  [new]
Серый_Ветер
Member

Откуда:
Сообщений: 5
имеется бекап таблицы table.cvs
в формате:
name_0;name_1;name_2;name_3;name_4;name_5;name_6;name_7;name_8;name_9;name_10;name_11;name_12;name_13;name_14;name_15;name_16;name_17;name_18;name_19


по приказу начальства удалил все данные из столбцов name_1;name_2;name_3.
удалял так:
update table 
set 
   name_1=N'', 
   name_2=N'',
   name_3=0
where name_0<>'';


и вот поступил приказ вернуть все обратно...

мастер импорта ругается на разное количество столбцов, хотя выбирал только name_1;name_2;name_3 ( я, кстати, не уверен, привяжет ли он к существующим данным эти столбцы)
в базе, в таблице остались все данные, кроме name_1;name_2;name_3.

Как из cvs файла все восстановить обратно?

p.s. name_0 нельзя не редактировать, не удалить, только добавить новый(хотя идентификатор не прописан на этом значении)
3 дек 14, 19:30    [16945939]     Ответить | Цитировать Сообщить модератору
 Re: UPDATE таблицы из файла cvs. msqsl 2008  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31783
Серый_Ветер
я, кстати, не уверен, привяжет ли он к существующим данным эти столбцы
Не привяжет, вы же не сохранили в файле идентификаторы строк, как же сервер сможет привязать?
3 дек 14, 19:57    [16946079]     Ответить | Цитировать Сообщить модератору
 Re: UPDATE таблицы из файла cvs. msqsl 2008  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4805
alexeyvg,

Попробуйте

SELECT * FROM OPENROWSET('MSDASQL','Driver={Microsoft Text Driver (*.txt; *.csv)}; DefaultDir=\\networkdrive\networkfolder;Extended properties=''ColNameHeader=True;Format=CSVDelimited;''','select * from CSV File.xlsx.csv')

А потом сделайте MERGE.

Если ключа нет, попробуйте сделать его например с помощью HASH_BYTES от сохранившегося набора полей.

А вы бекапы баз не делаете?
3 дек 14, 20:26    [16946208]     Ответить | Цитировать Сообщить модератору
 Re: UPDATE таблицы из файла cvs. msqsl 2008  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8350
Перед тем, как что-то удалить, перепишите данные в отдельную таблицу, как минимум. У начальства мозги куриные - сегодня удалить, завтра спрашивают - "а где это и это"?

А при массовых операциях "со слов руководства" создавайте сперва резервную копию базы.
4 дек 14, 13:54    [16949442]     Ответить | Цитировать Сообщить модератору
 Re: UPDATE таблицы из файла cvs. msqsl 2008  [new]
Jaffar
Member

Откуда:
Сообщений: 633
Для начала залейте все из csv в новую табличку в базе данных.

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

типа
select * 
from OLD_TABLE o
left join NEW_TABLE n on ......


--или через cross apply

select
from OLD_TABLE o
outer apply(
select top 1
from NEW_TABLE n
where
         ................. ) n.

если получиться - сделайте update для строк для которых однозначно определена связь.
остальные строчки - думать мудрить, на край отдать пользователям пусть руками делают.
4 дек 14, 14:05    [16949531]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить