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

Откуда:
Сообщений: 116
Задача следующая. Есть 2 таблицы.
table1(name, x, manufacturer)
table2(code1, code2, countryname)
Если в table1.name есть какая-либо русская буква, то вставить в table1.manufacturer table2.countryname где code2=643
Иначе вставить в table1.manufacturer table2.countryname где code2=840
Других идей пока не приходит, к тому же даже синтаксически не знаю как это написать. Но попытался примерно вот так:
USE Test2
VAR X UNICODE() 
scan _REFERENCE32
	IF TABLE1.NAME LIKE X THEN UPDATE TABLE1 SET TABLE1.MANUFACTURE=(SELECT TOP 1 COUNTRYNAME FROM TABLE2 WHERE CODE2=643)
	ELSE  UPDATE TABLE1 SET TABLE1.MANUFACTURE=(SELECT TOP 1 COUNTRYNAME FROM TABLE2 WHERE CODE2=840)
ENDSCAN


Или, может уже есть подобные реализованные варианты, или какие-либо альтернативные варианты решения такой задачи?
29 апр 13, 10:57    [14242781]     Ответить | Цитировать Сообщить модератору
 Re: UPDATE по всем строкам с условием наличия русских букв  [new]
Glory
Member

Откуда:
Сообщений: 104760
okwell5
Если в table1.name есть какая-либо русская буква

В любой из ста тысяч записей ?
29 апр 13, 10:59    [14242800]     Ответить | Цитировать Сообщить модератору
 Re: UPDATE по всем строкам с условием наличия русских букв  [new]
iap
Member

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

объясните, что такое "VAR", "scan", "ENDSCAN".
Что общего имеет это с MS SQL?
29 апр 13, 11:00    [14242805]     Ответить | Цитировать Сообщить модератору
 Re: UPDATE по всем строкам с условием наличия русских букв  [new]
okwell5
Member

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

объясните, что такое "VAR", "scan", "ENDSCAN".
Что общего имеет это с MS SQL?

я просто не знаю как в каждой строке это сделать, поэтому типа цикл по каждой строке.
VAR типа переменная типа русской буквы.
29 апр 13, 11:05    [14242831]     Ответить | Цитировать Сообщить модератору
 Re: UPDATE по всем строкам с условием наличия русских букв  [new]
okwell5
Member

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

объясните, что такое "VAR", "scan", "ENDSCAN".
Что общего имеет это с MS SQL?

я просто не знаю как в каждой строке это сделать, поэтому типа цикл по каждой строке.
VAR типа переменная типа русской буквы.


Хотя если sql массово выполняет эти условия во всех строках, тогда цикл по таблице не нужен.
29 апр 13, 11:07    [14242854]     Ответить | Цитировать Сообщить модератору
 Re: UPDATE по всем строкам с условием наличия русских букв  [new]
Гость333
Member

Откуда:
Сообщений: 3683
okwell5
попытался примерно вот так:
USE Test2
VAR X UNICODE() 
scan _REFERENCE32
	IF TABLE1.NAME LIKE X THEN UPDATE TABLE1 SET TABLE1.MANUFACTURE=(SELECT TOP 1 COUNTRYNAME FROM TABLE2 WHERE CODE2=643)
	ELSE  UPDATE TABLE1 SET TABLE1.MANUFACTURE=(SELECT TOP 1 COUNTRYNAME FROM TABLE2 WHERE CODE2=840)
ENDSCAN

Вы, случайно, не на FoxPro делаете?
29 апр 13, 11:14    [14242911]     Ответить | Цитировать Сообщить модератору
 Re: UPDATE по всем строкам с условием наличия русских букв  [new]
okwell5
Member

Откуда:
Сообщений: 116
Гость333
okwell5
попытался примерно вот так:
USE Test2
VAR X UNICODE() 
scan _REFERENCE32
	IF TABLE1.NAME LIKE X THEN UPDATE TABLE1 SET TABLE1.MANUFACTURE=(SELECT TOP 1 COUNTRYNAME FROM TABLE2 WHERE CODE2=643)
	ELSE  UPDATE TABLE1 SET TABLE1.MANUFACTURE=(SELECT TOP 1 COUNTRYNAME FROM TABLE2 WHERE CODE2=840)
ENDSCAN

Вы, случайно, не на FoxPro делаете?


Нет, я раньше на фоксе работал, поэтому схожести. А сейчас нужно на чистом sql реализовать.
Уточню: т.е. если в NAME найдена русская буква, то вставляем COUNTRYNAME где CODE2=643; иначе COUNTRYNAME где CODE2=840
29 апр 13, 11:18    [14242942]     Ответить | Цитировать Сообщить модератору
 Re: UPDATE по всем строкам с условием наличия русских букв  [new]
okwell5
Member

Откуда:
Сообщений: 116
okwell5
Гость333
пропущено...

Вы, случайно, не на FoxPro делаете?


Нет, я раньше на фоксе работал, поэтому схожести. А сейчас нужно на чистом sql реализовать.
Уточню: т.е. если в NAME найдена русская буква, то вставляем COUNTRYNAME где CODE2=643; иначе COUNTRYNAME где CODE2=840

любая русская буква из алфавита.
29 апр 13, 11:19    [14242947]     Ответить | Цитировать Сообщить модератору
 Re: UPDATE по всем строкам с условием наличия русских букв  [new]
invm
Member

Откуда: Москва
Сообщений: 9406
update t1
 set
  manufacturer = case when t1.name like '%[а-яА-Я]%' then t2.countryname else t3.countryname end
from
 table1 t1 join
 table2 t2 on t2.code2 = 643 join
 table2 t3 on t3.code2 = 840;
29 апр 13, 11:35    [14243078]     Ответить | Цитировать Сообщить модератору
 Re: UPDATE по всем строкам с условием наличия русских букв  [new]
Гость333
Member

Откуда:
Сообщений: 3683
invm
like '%[а-яА-Я]%'

Лучше так:
like '%[абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ]%'
ибо есть ещё всякая экзотическая кириллица типа Љ, Њ, Ќ, Ћ, Џ, ђ, не являющаяся русскими буквами.
29 апр 13, 11:40    [14243124]     Ответить | Цитировать Сообщить модератору
 Re: UPDATE по всем строкам с условием наличия русских букв  [new]
okwell5
Member

Откуда:
Сообщений: 116
Все, реализовал так:
UPDATE TABLE1 SET TABLE1 .MANUFACTURE=(SELECT COUNTRYNAME FROM TABLE2 WHERE Code2=643)
where  TABLE1 .NAME like '%[а-я]%'
UPDATE TABLE1 SET TABLE1 .MANUFACTURE=(SELECT COUNTRYNAME FROM TABLE2 WHERE Code2=840)
where  TABLE1 .NAME NOT like '%[а-я]%'

Если говорите, что [абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ] лучше, тогда заменю.
Спасибо всем откликнувшимся!
29 апр 13, 11:47    [14243180]     Ответить | Цитировать Сообщить модератору
 Re: UPDATE по всем строкам с условием наличия русских букв  [new]
invm
Member

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

И получили два скана таблицы вместо одного...
29 апр 13, 11:52    [14243217]     Ответить | Цитировать Сообщить модератору
 Re: UPDATE по всем строкам с условием наличия русских букв  [new]
okwell5
Member

Откуда:
Сообщений: 116
[абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ] не прошло, вставил [а-яА-Я] и прошло! Проверил.
29 апр 13, 12:33    [14243516]     Ответить | Цитировать Сообщить модератору
 Re: UPDATE по всем строкам с условием наличия русских букв  [new]
Гость333
Member

Откуда:
Сообщений: 3683
okwell5
[абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ] не прошло, вставил [а-яА-Я] и прошло! Проверил.

Приведите, пожалуйста, пример данных, на которых не прошло первое и прошло второе.
29 апр 13, 12:39    [14243570]     Ответить | Цитировать Сообщить модератору
 Re: UPDATE по всем строкам с условием наличия русских букв  [new]
okwell5
Member

Откуда:
Сообщений: 116
Гость333
okwell5
[абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ] не прошло, вставил [а-яА-Я] и прошло! Проверил.

Приведите, пожалуйста, пример данных, на которых не прошло первое и прошло второе.

TABLE1.NAME='МГТФ-0,07'
29 апр 13, 12:41    [14243599]     Ответить | Цитировать Сообщить модератору
 Re: UPDATE по всем строкам с условием наличия русских букв  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
okwell5
Гость333
пропущено...

Приведите, пожалуйста, пример данных, на которых не прошло первое и прошло второе.

TABLE1.NAME='МГТФ-0,07'
SELECT 643 WHERE N'МГТФ-0,07' LIKE N'%[абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ]%';
что возвращает?
29 апр 13, 12:54    [14243702]     Ответить | Цитировать Сообщить модератору
 Re: UPDATE по всем строкам с условием наличия русских букв  [new]
okwell5
Member

Откуда:
Сообщений: 116
iap
okwell5
пропущено...

TABLE1.NAME='МГТФ-0,07'
SELECT 643 WHERE N'МГТФ-0,07' LIKE N'%[абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ]%';
что возвращает?


Вернул 643
29 апр 13, 13:04    [14243759]     Ответить | Цитировать Сообщить модератору
 Re: UPDATE по всем строкам с условием наличия русских букв  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
okwell5
iap
пропущено...
SELECT 643 WHERE N'МГТФ-0,07' LIKE N'%[абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ]%';

что возвращает?


Вернул 643
А Вы сказки рассказываете, что "не прошло ... Проверил."
Нехорошо.
29 апр 13, 13:07    [14243781]     Ответить | Цитировать Сообщить модератору
 Re: UPDATE по всем строкам с условием наличия русских букв  [new]
okwell5
Member

Откуда:
Сообщений: 116
iap
okwell5
пропущено...


Вернул 643
А Вы сказки рассказываете, что "не прошло ... Проверил."
Нехорошо.

не знаю, почему так странно, вроде, одно и то же, но вот срабатывает по-разному.
29 апр 13, 16:14    [14245071]     Ответить | Цитировать Сообщить модератору
 Re: UPDATE по всем строкам с условием наличия русских букв  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31444
okwell5
[абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ] не прошло, вставил [а-яА-Я] и прошло! Проверил.
Лучше найти свою ошибку, а не использовать заведомо неправильный вариант

Вы просто проценты забыли.
29 апр 13, 17:11    [14245503]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить