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

Откуда:
Сообщений: 6
добрый день.
прошу проверить правильно ли написан скрип на UPDATE, так как он затронет десятки тысяч записей по штрафам ГИБДД в нашей базе.
нужно из таблицы [import_penalty] вставить данные из поля scan в таблицу [penalty] где поле penalty.scan is NULL при условии что uin совпадает в обоих таблицах.

UPDATE [dbo].[penalty] 
   SET [scan] = t2.[scan] 
from [dbo].[import_penalty] t2 join [dbo].[penalty] t1 on t1.uin = t2.uin
 WHERE t1.[scan] is null and t1.uin = t2.uin


правильно написан запрос?
заранее спасибо!
18 июл 17, 10:17    [20652670]     Ответить | Цитировать Сообщить модератору
 Re: Прошу проверить скрипт  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31355
kirill_d
правильно написан запрос?
1. не нужно 2 раза прописывать одно условие соединения таблиц.
2. Укажите алиас для обновляемой таблицы.
UPDATE t1
   SET [scan] = t2.[scan] 
from [dbo].[import_penalty] t2 
    join [dbo].[penalty] t1 on t1.uin = t2.uin
WHERE t1.[scan] is null
18 июл 17, 10:31    [20652744]     Ответить | Цитировать Сообщить модератору
 Re: Прошу проверить скрипт  [new]
Guf
Member

Откуда: Новосибирск
Сообщений: 641
[quot kirill_d]
UPDATE [dbo].[penalty] -- если уж дал таблице алиас во всем запросе используй его UPDATE [t1]
   SET [scan] = t2.[scan] 
from [dbo].[import_penalty] t2 join [dbo].[penalty] t1 on t1.uin = t2.uin
 WHERE t1.[scan] is null and t1.uin = t2.uin

Зачем 2 раза одно и тоже? Вдруг сервер с первого раз не поймет? ;-)
Чтобы не уменьшить риск облажаться в такой ситуации, напиши сначала селект
SELECT  [t1].[scan] AS [old_value]
      , [t2].[scan] AS [new_value]
from [dbo].[import_penalty] t2 join [dbo].[penalty] t1 on t1.uin = t2.uin
 WHERE t1.[scan] is null
18 июл 17, 10:33    [20652756]     Ответить | Цитировать Сообщить модератору
 Re: Прошу проверить скрипт  [new]
kirill_d
Member

Откуда:
Сообщений: 6
Select этот показывает как раз как мне надо записи под обновление.
UPDATE t1
   SET [scan] = t2.[scan] 
from [dbo].[import_penalty] t2 
    join [dbo].[penalty] t1 on t1.uin = t2.uin
WHERE t1.[scan] is null

этот получается запрос делаю и все будет хорошо? ))

К сообщению приложен файл. Размер - 19Kb
18 июл 17, 10:59    [20652873]     Ответить | Цитировать Сообщить модератору
 Re: Прошу проверить скрипт  [new]
kirill_d
Member

Откуда:
Сообщений: 6
Отработало отлично! спасибо!
18 июл 17, 12:01    [20653260]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить