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

Откуда:
Сообщений: 25
Доброго времени суток!
Подскажите как правильно составить запрос в MS SQL по update?

Как составить запрос таким образом чтобы из tab1 с col1 col2 col3 брались значения tab1 col1 и по очереди все вставлялись в таблицу tab2 col1 col2 col 3 в колонку col2?

вот такой курсор не работает. Он берет только первое значение из таблицы article и вставляет его во все строки таблицы price

DECLARE  
@article_id int
DECLARE article_id_cur CURSOR FOR (SELECT article_id FROM article)  
OPEN article_id_cur
FETCH NEXT FROM article_id_cur INTO @article_id
WHILE @@FETCH_STATUS = 0 
BEGIN 
  update price set article_id = @article_id
  FETCH NEXT FROM article_id_cur INTO @article_id
END
CLOSE article_id_cur
DEALLOCATE article_id_cur

Как его переделать, чтобы он брал каждое значение и вставлял его по очереди?
Заранее спасибо за ответ!
14 июл 11, 11:07    [10971877]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос с update  [new]
Glory
Member

Откуда:
Сообщений: 104751
Изучайте синтаксис команд и будет вам счастье

update a set col2=b.col1
from tab2 a inner join tab1 b on a.id=b.id
14 июл 11, 11:10    [10971894]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос с update  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
автор
Как его переделать,


1. Убрать курсор;
2. Разобрать пример С справки по UPDATE или примеры MERGE, если версия сервера позволяет.
14 июл 11, 11:13    [10971917]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос с update  [new]
e-lena78
Member

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

update price set article_id = a.article_id
from article a inner join price on a.article_id = price.article_id

Число обработанных строк 0.
Не обновляет :(
14 июл 11, 13:27    [10973321]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос с update  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
e-lena78
Glory,

update price set article_id = a.article_id
from article a inner join price on a.article_id = price.article_id

Число обработанных строк 0.
Не обновляет :(
Значит, условие JOINа не выполняется.
14 июл 11, 13:29    [10973342]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос с update  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
e-lena78
Glory,

update price set article_id = a.article_id
from article a inner join price on a.article_id = price.article_id

Число обработанных строк 0.
Не обновляет :(
Странный UPDATE.
Полю price.article_id присваивается значение a.article_id, если оно и так уже равно этому значению!
14 июл 11, 13:31    [10973363]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос с update  [new]
Glory
Member

Откуда:
Сообщений: 104751
e-lena78
Glory,

update price set article_id = a.article_id
from article a inner join price on a.article_id = price.article_id
Число обработанных строк 0.
Не обновляет :(

Не обновляет и обновляет 0 строк - это разные вещи
Второе говорит о неправильном выражении соединения
Вот интересно как вы собрались выполнять set article_id = a.article_id, если по этому же выражению вы связываете таблицы - on a.article_id = price.article_id ?
14 июл 11, 13:31    [10973365]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос с update  [new]
e-lena78
Member

Откуда:
Сообщений: 25
Glory, обновляет 0 строк.

У меня колонка price.article_id является вторичным ключом к article.article_id. Эти самые ключи мне и нужно тупо вставить в таблицу price из таблицы article. По порядку.
14 июл 11, 14:59    [10974204]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос с update  [new]
Glory
Member

Откуда:
Сообщений: 104751
e-lena78
Glory, обновляет 0 строк.

У меня колонка price.article_id является вторичным ключом к article.article_id. Эти самые ключи мне и нужно тупо вставить в таблицу price из таблицы article. По порядку.

Вы сначала определитесь - обновить или вставить
Потому что это разные команды
14 июл 11, 15:00    [10974220]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос с update  [new]
e-lena78
Member

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

обновить. Т.к. остальные столбцы таблицы уже заполнены данными. Нужно вставить только эту колонку. Если делать insert то он добавляет строки к уже имеющимся, а мне нужно чтобы колонка price.article_id которая сейчас запонена null значениями заполнилась значениями из article.article_id, а значения в остальных колонках сохранились
14 июл 11, 15:15    [10974387]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос с update  [new]
Уточнение
Guest
ЧТо вернут запросы:

select top 10 * from article

select top 10 from price
14 июл 11, 15:23    [10974443]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос с update  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381

> а мне нужно чтобы колонка price.article_id которая сейчас запонена null значениями
> заполнилась значениями из article.article_id, а значения в остальных колонках сохранились

а, то есть, в какой строке price какой article_id окажется - это без разницы?

Posted via ActualForum NNTP Server 1.4

14 июл 11, 15:26    [10974477]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос с update  [new]
e-lena78
Member

Откуда:
Сообщений: 25
Уточнение,

select top 10 * from article

article_id name deliveri_id quantity edin_izm_id provider_id office_id
9881 Композиция №3 288 8 1 80447 1
9882 Букет VIP 288 8 1 80447 1
9883 Букет №3 288 11 1 80447 1
9884 Книга "Правила " . 291 1 1 80448 1
9885 Книга "ПБ" 291 1 1 80448 1
9886 Книга "Инструкция " 291 1 1 80448 1
9887 Книга "ПБ" 291 1 1 80448 1
9888 Книга "МП по ОТ " 291 1 1 80448 1
9889 Книга "МП" 291 1 1 80448 1
9890 Книга "Установки газотурбинные" 291 1 1 80448 1


select top 10 from price 

price_id article_id price_doc n_tzr tzr cnds_tzr
503718 NULL 3500 28000 0 28000
503719 NULL 5000 40000 0 40000
503720 NULL 3500 38500 0 38500
503721 NULL 335 335 60.3 395.3
503722 NULL 400 400 72 472
503723 NULL 290 290 52.2 342.2
503724 NULL 320 320 57.6 377.6
503725 NULL 340 340 61.2 401.2
503726 NULL 340 340 61.2 401.2
503727 NULL 220 220 39.6 259.6
14 июл 11, 15:42    [10974604]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос с update  [new]
e-lena78
Member

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

Все отслальные значения вставлены по порядку и article_id тоже нужно вставить по порядку.
14 июл 11, 15:43    [10974615]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос с update  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381

> Все отслальные значения вставлены по порядку и article_id тоже нужно вставить по порядку.

этот порядок каким-то столбцом определяется?

Posted via ActualForum NNTP Server 1.4

14 июл 11, 15:45    [10974630]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос с update  [new]
e-lena78
Member

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

Все значения вставлялись из таблицы Exele. Остальные значения вставлены в том порядке в котором они идут в таблице price. article_id в таблице article автоинкрементно, т.е. идет по порядку. В результате конечно в таблице price столбец article_id будет соотвествевать всей отслальной инфе в этой строчке, если мы просто вставим их туда по возрастанию. Не было никакой привязки изначально в фале, поэтому связываю их уже в таблице непосредственно.
14 июл 11, 15:52    [10974686]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос с update  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381

в price порядок price_id определяет?

Posted via ActualForum NNTP Server 1.4

14 июл 11, 15:55    [10974710]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос с update  [new]
e-lena78
Member

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

Нет. Порядок просто прямой. Вставлено по строчкам 1,2,3,4... и т .д. Id так же вставить по строчкам по порядку 1,2,3,4...и т.д.
14 июл 11, 15:57    [10974727]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос с update  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381

да - и версия сервера какая?

Posted via ActualForum NNTP Server 1.4

14 июл 11, 15:57    [10974732]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос с update  [new]
Shakill
Member

Откуда: мск
Сообщений: 1887
e-lena78, в таблицах строки сами по себе номера не имеют. в price нужен столбец, по которому можно узнать порядок вставки
14 июл 11, 15:59    [10974752]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос с update  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381

> Нет. Порядок просто прямой.

то есть, price_id могут не "по порядку" идти?

Posted via ActualForum NNTP Server 1.4

14 июл 11, 15:59    [10974753]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос с update  [new]
e-lena78
Member

Откуда:
Сообщений: 25
daw,
price_id - автоинкрементное поле.
14 июл 11, 16:03    [10974788]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос с update  [new]
e-lena78
Member

Откуда:
Сообщений: 25
Shakill,
Выше есть выборка из обеих таблиц. В price есть автоинкриментное поле price_id
14 июл 11, 16:04    [10974796]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос с update  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381

> price_id - автоинкрементное поле.

ну так, если по нему отсортировать - порядок "правильный" будет?
и еще раз - версия сервера? а то, вдруг, у вас 2000-ый окажется.

Posted via ActualForum NNTP Server 1.4

14 июл 11, 16:07    [10974818]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос с update  [new]
e-lena78
Member

Откуда:
Сообщений: 25
daw,
Да, порядок будет правильный.
Сервер 2008
14 июл 11, 16:12    [10974865]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить