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

Откуда:
Сообщений: 76
Добрый день. Есть задача: для пустого поля, подобрать случайную букву, максимально разнообразно. Решил сделать это след образом:
select *
from dbo.Fwork a
outer apply (
select top 1 a1.letter from dbo.male a1 order by newid()
) ap
where a.rName='' or a.rName is null
Но
outer apply выдает мне подряд одно и тоже кол-во одинаковых букв. в основном по 17. В таблице male содержится русский алфавит. Помогите понять почему, и как можно это исправить. Спасибо
Результаты отработки(2-ой столбец результаты outer apply):
ь
NULL ь
NULL ь
NULL ь
NULL ь
NULL ь
NULL ь
NULL ь
NULL т
NULL т
NULL т
NULL т
NULL т
NULL т
NULL и
23 июл 15, 09:40    [17924397]     Ответить | Цитировать Сообщить модератору
 Re: Outer apply сгенерить случайный символ  [new]
iap
Member

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

Нет связи между основным запросом и подзапросом.
Оптимизатор считает, что проще и быстрее вызвать NEWID() один раз, да и всё.
Раз для подзапроса ничего измениться не может.
23 июл 15, 09:55    [17924465]     Ответить | Цитировать Сообщить модератору
 Re: Outer apply сгенерить случайный символ  [new]
invm
Member

Откуда: Москва
Сообщений: 9845
select
 o.name, a.c
from
 sys.objects o cross apply
 (select substring('АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЬЪЭЮЯ', cast(rand(checksum(newid())) * 32 + 1 as int), 1)) a(c)
23 июл 15, 10:59    [17924689]     Ответить | Цитировать Сообщить модератору
 Re: Outer apply сгенерить случайный символ  [new]
bananazury
Member

Откуда:
Сообщений: 76
Круто! Спасибо!
23 июл 15, 11:17    [17924792]     Ответить | Цитировать Сообщить модератору
 Re: Outer apply сгенерить случайный символ  [new]
andrey odegov
Member

Откуда:
Сообщений: 473
а так ли необходим apply?
select name,
  (select substring('АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЬЪЭЮЯ',
   cast(rand(checksum(newid())) * 32 + 1 as int), 1)) a(c)
from sys.objects
23 июл 15, 13:18    [17925391]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить