Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Групповой апдейт  [new]
R-Magistr
Member

Откуда:
Сообщений: 356
Здравствуйте,
Вот скрипт:
SELECT t.ACCPREF,t.ACCNUMB,ts.NOMEN,ts.COMMENTS,ac.COMMENTS
		from v_TRANSIV t
		LEFT JOIN TRANSIVSPECS ts on t.VCODE=ts.pcode
		LEFT JOIN accdoc a on a.PREF=t.ACCPREF AND a.NUMB=t.ACCNUMB
		LEFT join accdocspecs ac on a.VCODE=ac.pcode AND ac.NOMEN=ts.NOMEN
	where t.VCODE=54433


t.ACCPREF | t.ACCPREF | t.ACCNUMB | ts.COMMENTS | ac.COMMENTS
---------------------------------------------------------------------------
05/14	        56	  3465		          р/с_ПАФ-11-1_ГОСТ18829-73/9833-73_
05/14   	56	  3470		          р/с_ПАФ-11-1_ГОСТ18829-73/9833-73_
05/14	        56	  5111		          р/с_ПАФ-11-1_ГОСТ18829-73/9833-73_


какой апдейт мне написать для таблицы TRANSIVSPECS ts, что бы данные из ac.comments переписать в ts.comments
27 май 14, 12:03    [16078280]     Ответить | Цитировать Сообщить модератору
 Re: Групповой апдейт  [new]
Glory
Member

Откуда:
Сообщений: 104760
R-Magistr
какой апдейт мне написать для таблицы TRANSIVSPECS ts, что бы данные из ac.comments переписать в ts.comments

Синтаксически правильный
Для начала написать запрос, где TRANSIVSPECS будет первой таблицей во FROM
27 май 14, 12:09    [16078357]     Ответить | Цитировать Сообщить модератору
 Re: Групповой апдейт  [new]
_human
Member

Откуда:
Сообщений: 560
автор
UPDATE D
SET tgt_country = src_country,
tgt_postalcode = src_postalcode
FROM (SELECT TGT.custid, TGT.country AS tgt_country,
SRC.country AS src_country, TGT.postalcode AS tgt_postalcode,
SRC.postalcode AS src_postalcode
FROM Sales.MyCustomers AS TGT
INNER JOIN Sales.Customers AS SRC
ON TGT.custid = SRC.custid
) AS D;
27 май 14, 12:43    [16078676]     Ответить | Цитировать Сообщить модератору
 Re: Групповой апдейт  [new]
R-Magistr
Member

Откуда:
Сообщений: 356
_human
автор
UPDATE D
SET tgt_country = src_country,
tgt_postalcode = src_postalcode
FROM (SELECT TGT.custid, TGT.country AS tgt_country,
SRC.country AS src_country, TGT.postalcode AS tgt_postalcode,
SRC.postalcode AS src_postalcode
FROM Sales.MyCustomers AS TGT
INNER JOIN Sales.Customers AS SRC
ON TGT.custid = SRC.custid
) AS D;


мммм...не совсем понятно.... т.е. мне нужно делать фром мой селект?
27 май 14, 14:56    [16080021]     Ответить | Цитировать Сообщить модератору
 Re: Групповой апдейт  [new]
user89
Member

Откуда:
Сообщений: 2083
R-Magistr,

можно еще так переписать
;with D as (
  SELECT TGT.custid, TGT.country AS tgt_country,
  SRC.country AS src_country, TGT.postalcode AS tgt_postalcode,
  SRC.postalcode AS src_postalcode
  FROM Sales.MyCustomers AS TGT
  INNER JOIN Sales.Customers AS SRC
  ON TGT.custid = SRC.custid
)
UPDATE D
SET tgt_country = src_country,
tgt_postalcode = src_postalcode

Я называю это Update с предварительным просмотром. В Management Studio выделяем блок, где select, нажимаем F5, смотрим старое и новое значение. Если всё устраивает, то запускаем полностью c Update.
27 май 14, 15:05    [16080129]     Ответить | Цитировать Сообщить модератору
 Re: Групповой апдейт  [new]
R-Magistr
Member

Откуда:
Сообщений: 356
user89
R-Magistr,

можно еще так переписать
;with D as (
  SELECT TGT.custid, TGT.country AS tgt_country,
  SRC.country AS src_country, TGT.postalcode AS tgt_postalcode,
  SRC.postalcode AS src_postalcode
  FROM Sales.MyCustomers AS TGT
  INNER JOIN Sales.Customers AS SRC
  ON TGT.custid = SRC.custid
)
UPDATE D
SET tgt_country = src_country,
tgt_postalcode = src_postalcode

Я называю это Update с предварительным просмотром. В Management Studio выделяем блок, где select, нажимаем F5, смотрим старое и новое значение. Если всё устраивает, то запускаем полностью c Update.



можно привести пример с моим кодом, пожалуйста
27 май 14, 15:11    [16080182]     Ответить | Цитировать Сообщить модератору
 Re: Групповой апдейт  [new]
user89
Member

Откуда:
Сообщений: 2083
R-Magistr,

а я и привел   Прям так и запускайте.
27 май 14, 15:18    [16080259]     Ответить | Цитировать Сообщить модератору
 Re: Групповой апдейт  [new]
R-Magistr
Member

Откуда:
Сообщений: 356
user89,

Ну я не понял как писать :( помогите пожалуйста разобраться
2 июн 14, 14:16    [16106366]     Ответить | Цитировать Сообщить модератору
 Re: Групповой апдейт  [new]
R-Magistr
Member

Откуда:
Сообщений: 356
user89,

додумал вот до чего:

update TRANSIVSPECS  set ts.COMMENTS = ac.COMMENTS  
    where ac.vcode in 
        (SELECT ac.vcode
		from v_TRANSIV t
		LEFT JOIN TRANSIVSPECS ts on t.VCODE=ts.pcode
		LEFT JOIN accdoc a on a.PREF=t.ACCPREF AND a.NUMB=t.ACCNUMB
		LEFT join accdocspecs ac on a.VCODE=ac.pcode AND ac.NOMEN=ts.NOMEN
	where t.VCODE=54384)
        and ts.vcode in
        (SELECT ts.vcode
		from v_TRANSIV t
		LEFT JOIN TRANSIVSPECS ts on t.VCODE=ts.pcode
		LEFT JOIN accdoc a on a.PREF=t.ACCPREF AND a.NUMB=t.ACCNUMB
		LEFT join accdocspecs ac on a.VCODE=ac.pcode AND ac.NOMEN=ts.NOMEN
	where t.VCODE=54384)


Будет ли такое работать вообще?
2 июн 14, 14:21    [16106402]     Ответить | Цитировать Сообщить модератору
 Re: Групповой апдейт  [new]
Glory
Member

Откуда:
Сообщений: 104760
R-Magistr
Будет ли такое работать вообще?

Запустить и узнать - не судьба ?
2 июн 14, 14:22    [16106408]     Ответить | Цитировать Сообщить модератору
 Re: Групповой апдейт  [new]
R-Magistr
Member

Откуда:
Сообщений: 356
R-Magistr,

или так может?

update TRANSIVSPECS ts1 set 
ts1.COMMENTS=(SELECT ac.COMMENTS
		              from v_TRANSIV t
		              LEFT JOIN TRANSIVSPECS ts on t.VCODE=ts.pcode
		              LEFT JOIN accdoc a on a.PREF=t.ACCPREF AND a.NUMB=t.ACCNUMB
		              LEFT join accdocspecs ac on a.VCODE=ac.pcode AND ac.NOMEN=ts.NOMEN
	                 where t.VCODE=54384
		                  AND ts.VCODE=ts1.vcode)
2 июн 14, 14:31    [16106470]     Ответить | Цитировать Сообщить модератору
 Re: Групповой апдейт  [new]
R-Magistr
Member

Откуда:
Сообщений: 356
Glory
R-Magistr
Будет ли такое работать вообще?

Запустить и узнать - не судьба ?


Это же Update, сейчас напишу не то, как наапдейчу, так что лучше всё проверить и посоветоваться
2 июн 14, 14:32    [16106473]     Ответить | Цитировать Сообщить модератору
 Re: Групповой апдейт  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
R-Magistr
R-Magistr,

или так может?

update TRANSIVSPECS ts1 set 
ts1.COMMENTS=(SELECT ac.COMMENTS
		              from v_TRANSIV t
		              LEFT JOIN TRANSIVSPECS ts on t.VCODE=ts.pcode
		              LEFT JOIN accdoc a on a.PREF=t.ACCPREF AND a.NUMB=t.ACCNUMB
		              LEFT join accdocspecs ac on a.VCODE=ac.pcode AND ac.NOMEN=ts.NOMEN
	                 where t.VCODE=54384
		                  AND ts.VCODE=ts1.vcode)

так точно не заработает.
Выб проверли что ли ...
2 июн 14, 14:33    [16106481]     Ответить | Цитировать Сообщить модератору
 Re: Групповой апдейт  [new]
Glory
Member

Откуда:
Сообщений: 104760
R-Magistr
сейчас напишу не то, как наапдейчу,

А создавать тестовые таблицы ломает ?
2 июн 14, 14:33    [16106482]     Ответить | Цитировать Сообщить модератору
 Re: Групповой апдейт  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
R-Magistr
Это же Update, сейчас напишу не то, как наапдейчу, так что лучше всё проверить и посоветоваться

вы что по живому на проде ????
..ху..к, ху..к и в продакшен
2 июн 14, 14:34    [16106485]     Ответить | Цитировать Сообщить модератору
 Re: Групповой апдейт  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
R-Magistr,

а ничего, что алиасы объявляются только во FROMе (почему-то, за исключением MERGE)?
2 июн 14, 14:34    [16106489]     Ответить | Цитировать Сообщить модератору
 Re: Групповой апдейт  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
R-Magistr,

точно надо апдейтить весь миллиард записей?
2 июн 14, 14:36    [16106501]     Ответить | Цитировать Сообщить модератору
 Re: Групповой апдейт  [new]
R-Magistr
Member

Откуда:
Сообщений: 356
iap,

не понял вас, что вы имеете ввиду?
2 июн 14, 14:39    [16106529]     Ответить | Цитировать Сообщить модератору
 Re: Групповой апдейт  [new]
user89
Member

Откуда:
Сообщений: 2083
R-Magistr
Это же Update, сейчас напишу не то, как наапдейчу, так что лучше всё проверить и посоветоваться[/SRC]Сделайте копию базы (или нужных таблиц)
Эксперименты проводим над копией.


R-Magistr
user89,
Ну я не понял как писать :( помогите пожалуйста разобраться
На картинке другой запрос, но принцип тот же.Картинка с другого сайта.
2 июн 14, 14:40    [16106537]     Ответить | Цитировать Сообщить модератору
 Re: Групповой апдейт  [new]
Гадя Петрович
Member

Откуда: планета Плюк, 215 в тентуре, галактика Кин-дза-дза в Спирали
Сообщений: 52912
user89
В Management Studio выделяем блок, где select, нажимаем F5, смотрим старое и новое значение. Если всё устраивает, то запускаем полностью c Update.
Картина Репина "BEGIN TRAN для слабаков, мы изобретём свой велосипед"...
2 июн 14, 14:42    [16106547]     Ответить | Цитировать Сообщить модератору
 Re: Групповой апдейт  [new]
R-Magistr
Member

Откуда:
Сообщений: 356
user89,

Типо вот так?

;with D as (
SELECT ac.COMMENTS as ac_COMMENTS 
           ,ts.COMMENTS  as ts_COMMENTS 
		from v_TRANSIV t
		LEFT JOIN TRANSIVSPECS ts on t.VCODE=ts.pcode
		LEFT JOIN accdoc a on a.PREF=t.ACCPREF AND a.NUMB=t.ACCNUMB
		LEFT join accdocspecs ac on a.VCODE=ac.pcode AND ac.NOMEN=ts.NOMEN
	where t.VCODE=:vcode
)
UPDATE D
SET ts_COMMENTS = ac_COMMENTS 


А вот эта точка с запятой она обязательна? Вроде как жеж и нет ))))
2 июн 14, 14:55    [16106635]     Ответить | Цитировать Сообщить модератору
 Re: Групповой апдейт  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
R-Magistr
iap,

не понял вас, что вы имеете ввиду?
В каком из двух мест?
2 июн 14, 14:59    [16106671]     Ответить | Цитировать Сообщить модератору
 Re: Групповой апдейт  [new]
R-Magistr
Member

Откуда:
Сообщений: 356
iap
R-Magistr,

а ничего, что алиасы объявляются только во FROMе (почему-то, за исключением MERGE)?


тут
2 июн 14, 15:03    [16106703]     Ответить | Цитировать Сообщить модератору
 Re: Групповой апдейт  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
R-Magistr
iap
R-Magistr,

а ничего, что алиасы объявляются только во FROMе (почему-то, за исключением MERGE)?


тут
У Вас алиас объявлен вот где:
update TRANSIVSPECS ts1 set 
а это вовсе даже не FROM!
В MSSQL так нельзя!
2 июн 14, 15:05    [16106713]     Ответить | Цитировать Сообщить модератору
 Re: Групповой апдейт  [new]
R-Magistr
Member

Откуда:
Сообщений: 356
iap
R-Magistr
пропущено...


тут
У Вас алиас объявлен вот где:
update TRANSIVSPECS ts1 set 
а это вовсе даже не FROM!
В MSSQL так нельзя!


ааааааааа, спасибо большое
2 июн 14, 15:07    [16106727]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить