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

Откуда:
Сообщений: 53
Добрый день.
У меня стоит задача изменить в таблице значение Name в зависимости от MCode
Сижу и думаю как это можно сделать. на ум приходить только CASE поместив его как-то в UPDATE
Но не знаю как правильно, и можно ли так сделать?
16 дек 13, 11:20    [15297522]     Ответить | Цитировать Сообщить модератору
 Re: CASE в UPDATE  [new]
Яковец Сергей
Member

Откуда:
Сообщений: 53
прошу прощения, перенесите тему в ветку по SQL из Access
16 дек 13, 11:24    [15297545]     Ответить | Цитировать Сообщить модератору
 Re: CASE в UPDATE  [new]
0815
Guest
Яковец Сергей
прошу прощения, перенесите тему в ветку по SQL из Access


типа там такие имена для объектов структуры допускаются
16 дек 13, 11:35    [15297612]     Ответить | Цитировать Сообщить модератору
 Re: CASE в UPDATE  [new]
8405
Guest
это значение.
сорри, поторопился
16 дек 13, 11:37    [15297624]     Ответить | Цитировать Сообщить модератору
 Re: CASE в UPDATE  [new]
qwerty112
Guest
Яковец Сергей
прошу прощения, перенесите тему в ветку по SQL из Access

неторопись, друг,
в бид=1 за "дурковатые вопросы" - могут и прибанить, даа ... :)

давай лучче тут "потренируйся"
как делал ? - что не получилось ?

зы
походу - можешь ознакомиться с рекомендациями
Рекомендации по оформлению сообщений в форуме
РЕКОМЕНДАЦИИ по публикации сообщений (ЧИТАЙТЕ FAQ, а также...)
16 дек 13, 11:44    [15297668]     Ответить | Цитировать Сообщить модератору
 Re: CASE в UPDATE  [new]
Яковец Сергей
Member

Откуда:
Сообщений: 53
делаю так:
UPDATE h_tbl_MaterialEmpty
SET DescFullUA = + CASE

WHEN Mcode=1 THEN Подарункового набору
WHEN Mcode=2 THEN Подарункового набору2
WHEN Mcode=3 THEN Подарункового набору3
WHEN Mcode=4 THEN Подарункового набору4
END
WHERE (Mcode = 1) or
(Mcode = 2)
(Mcode = 3)
(Mcode = 4) ... и тд
16 дек 13, 11:57    [15297747]     Ответить | Цитировать Сообщить модератору
 Re: CASE в UPDATE  [new]
qwerty112
Guest
Яковец Сергей
делаю так:
UPDATE       h_tbl_MaterialEmpty
SET                DescFullUA = + CASE 

WHEN Mcode=1 THEN Подарункового набору
WHEN Mcode=2 THEN Подарункового набору2
WHEN Mcode=3 THEN Подарункового набору3
WHEN Mcode=4 THEN Подарункового набору4
END
WHERE (Mcode = 1) or 
(Mcode = 2)
(Mcode = 3)
(Mcode = 4) ... и тд

а этот "+" - что символизирует ? нужно к существ.DescFullUA ДОПИСАТЬ что-то, в зависимости от Mcode, так ?

и в апострофы текстовые литералы не забываем брать ...
UPDATE       h_tbl_MaterialEmpty
SET                DescFullUA = DescFullUA /*или isnull(DescFullUA,'') (?)*/ + CASE 

WHEN Mcode=1 THEN 'Подарункового набору'
WHEN Mcode=2 THEN 'Подарункового набору2'
WHEN Mcode=3 THEN 'Подарункового набору3'
WHEN Mcode=4 THEN 'Подарункового набору4'
END
WHERE 
Mcode in (1,2,3,4) /*лучше Mcode between 1 and 4 если есть возможность*/
16 дек 13, 12:08    [15297817]     Ответить | Цитировать Сообщить модератору
 Re: CASE в UPDATE  [new]
Яковец Сергей
Member

Откуда:
Сообщений: 53
спасибо,
А если в слове апофстроф ' стоит?
как его отделить правильно?
16 дек 13, 12:16    [15297877]     Ответить | Цитировать Сообщить модератору
 Re: CASE в UPDATE  [new]
Осьменоги
Guest
qwerty112
Mcode in (1,2,3,4) /*лучше Mcode between 1 and 4 если есть возможность*/


REM> мне кажется что здесь можно и CHOOSE вместо CASE


будет гораздо короче прозрачнее
16 дек 13, 12:17    [15297887]     Ответить | Цитировать Сообщить модератору
 Re: CASE в UPDATE  [new]
qwerty112
Guest
Осьменоги
qwerty112
Mcode in (1,2,3,4) /*лучше Mcode between 1 and 4 если есть возможность*/


REM> мне кажется что здесь можно и CHOOSE вместо CASE


будет гораздо короче прозрачнее

дык, ТС - "заблудился" 15297545 :))
ему нужно на МС СКЛном Т-СКЛ ,
а там CHOOSE - нет
16 дек 13, 12:19    [15297902]     Ответить | Цитировать Сообщить модератору
 Re: CASE в UPDATE  [new]
Яковец Сергей
Member

Откуда:
Сообщений: 53
например
WHEN Mcode=6 THEN 'М'яке мило'
как корректно апостроф в слове записать?
16 дек 13, 12:21    [15297910]     Ответить | Цитировать Сообщить модератору
 Re: CASE в UPDATE  [new]
qwerty112
Guest
Яковец Сергей
спасибо,
А если в слове апофстроф ' стоит?
как его отделить правильно?

тогда нужно апостроф удваивать
Name = 'об''єм'
16 дек 13, 12:23    [15297923]     Ответить | Цитировать Сообщить модератору
 Re: CASE в UPDATE  [new]
Осьменоги
Guest
qwerty112
дык, ТС - "заблудился"

а-а-а-а
заблуди-и-ился...
16 дек 13, 12:23    [15297925]     Ответить | Цитировать Сообщить модератору
 Re: CASE в UPDATE  [new]
?????
Guest
CHOOSE (Transact-SQL)
Осьменоги
мне кажется
?????
16 дек 13, 12:27    [15297954]     Ответить | Цитировать Сообщить модератору
 Re: CASE в UPDATE  [new]
qwerty112
Guest
?????
CHOOSE (Transact-SQL)
Осьменоги
мне кажется
?????

даа, в МС СКЛ 2012 - добавили :)
они и IIf - добавили

зы
видимо по просьбам "побежавших" с Акцесса на мс-скуль
16 дек 13, 12:30    [15297986]     Ответить | Цитировать Сообщить модератору
 Re: CASE в UPDATE  [new]
Яковец Сергей
Member

Откуда:
Сообщений: 53
запрос отработал и все нормально изменилось.
Но теперь новая проблема.
вместо букв знаки вопросов =(
16 дек 13, 12:32    [15298000]     Ответить | Цитировать Сообщить модератору
 Re: CASE в UPDATE  [new]
Яковец Сергей
Member

Откуда:
Сообщений: 53
точнее только русские или украинские символы
16 дек 13, 12:33    [15298009]     Ответить | Цитировать Сообщить модератору
 Re: CASE в UPDATE  [new]
qwerty112
Guest
Яковец Сергей
запрос отработал и все нормально изменилось.
Но теперь новая проблема.
вместо букв знаки вопросов =(

а поле, которое апдейтится с каким типом ? - varchar ?
переделай на nvarchar
16 дек 13, 12:35    [15298028]     Ответить | Цитировать Сообщить модератору
 Re: CASE в UPDATE  [new]
Яковец Сергей
Member

Откуда:
Сообщений: 53
оно и так nvarchar(400)
16 дек 13, 12:37    [15298049]     Ответить | Цитировать Сообщить модератору
 Re: CASE в UPDATE  [new]
qwerty112
Guest
qwerty112
Яковец Сергей
запрос отработал и все нормально изменилось.
Но теперь новая проблема.
вместо букв знаки вопросов =(

а поле, которое апдейтится с каким типом ? - varchar ?
переделай на nvarchar

+ вот это ещё
WHEN Mcode=1 THEN N'Подарункового набору'
WHEN Mcode=2 THEN N'Подарункового набору2'
WHEN Mcode=3 THEN N'Подарункового набору3'
WHEN Mcode=4 THEN N'Подарункового набору4'
16 дек 13, 12:39    [15298059]     Ответить | Цитировать Сообщить модератору
 Re: CASE в UPDATE  [new]
полином
Guest
Яковец Сергей
например
WHEN Mcode=6 THEN 'М'яке мило'


да какя разница - Мсоde=6 все равно в диапазон не попадает

может и правда лучше сразу в SQL такой хардкод перенести?
16 дек 13, 12:41    [15298082]     Ответить | Цитировать Сообщить модератору
 Re: CASE в UPDATE  [new]
Яковец Сергей
Member

Откуда:
Сообщений: 53
Всем спасибо. Все отработало на отлично.
16 дек 13, 12:43    [15298097]     Ответить | Цитировать Сообщить модератору
 Re: CASE в UPDATE  [new]
Rivkin Dmitry
Member

Откуда: Israel
Сообщений: 5500
Яковец Сергей,

UPDATE       h_tbl_MaterialEmpty
SET DescFullUA = DescFullUA + N'Подарункового набору' + cast(Mcode as nvarchar)
WHERE Mcode in (1,2,3,4)


Вот эта большая буква N должна обязательно присутствовать в апдейте или инсерте в поля типа nvarchar

Модератор: Тема перенесена из форума "Microsoft Access".


Сообщение было отредактировано: 16 дек 13, 13:06
16 дек 13, 12:49    [15298129]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить