powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Передача в запросе строки, формируемой из данных
31 сообщений из 31, показаны все 2 страниц
Передача в запросе строки, формируемой из данных
    #32005932
Alexandr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Запрос типа:
DECLARE @S VARCHAR(20)
SET @S=''
SELECT FirmName, @S=@S+CONVERT(VARCHAR,L.NumberID) FROM Reklama R
INNER JOIN Clients C
ON C.ClientID=R.ClientID
INNER JOIN MagazinsList L
ON R.ReclamID=L.ReklamaID

Ясно, что такой запрос не работает. На одно поле FirmName может быть несколько полей NumberID. Каким образом в запросе можно сразу возвращать строку, сформированную из данных подзапроса (Набор всех NumberID)?
...
Рейтинг: 0 / 0
Передача в запросе строки, формируемой из данных
    #32005946
cube
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
использовать курсоры
...
Рейтинг: 0 / 0
Передача в запросе строки, формируемой из данных
    #32005954
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не работает, потому что в селекте можно или присваивать, или выбирать данные. Одновременно нельзя. А такой запрос работать будет:
DECLARE @S VARCHAR(20)
SET @S=''
SELECT @S=@S+CONVERT(VARCHAR,L.NumberID) FROM Reklama R
INNER JOIN Clients C
ON C.ClientID=R.ClientID
INNER JOIN MagazinsList L
ON R.ReclamID=L.ReklamaID

Если Вам нужно что-то типа группировки по NumberID, то из этого запроса сделайте функцию.
...
Рейтинг: 0 / 0
Передача в запросе строки, формируемой из данных
    #32005968
Slava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А я бы наверно всеже использовал cursor. Немного кода на открытие, закрытие и освобождение, зато за одну операцию можно присвоить сразу нескольким переменным нужные значения, плюс возможность перемещаться по данным.
...
Рейтинг: 0 / 0
Передача в запросе строки, формируемой из данных
    #32005975
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Slava
> плюс возможность перемещаться по данным.

Вы полагаете это плюс!?
...
Рейтинг: 0 / 0
Передача в запросе строки, формируемой из данных
    #32005982
Slava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
<Вы полагаете это плюс!?
100% не минус, а раз в математике другого не дано, значит плюс.
И все же что Вы имеете в виду?
...
Рейтинг: 0 / 0
Передача в запросе строки, формируемой из данных
    #32005985
Raimund
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Слушайте, а как энто тогда будет выглядеть с курсором? Я уже пять лет пишу проги складских и офисных типов с SQL, но ни разу не использовал курсоры... И даже слабо представляю, что это такое... )
...
Рейтинг: 0 / 0
Передача в запросе строки, формируемой из данных
    #32005987
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Raimund
Анекдот(старый правда):
------------------
Хакер просыпается после пьянки, всё болит и т.д.
Жена(тоже хакерша) подходит:
- Давай может какую защиту у программы вскроем, может полегчает?
- Нет, не хочу.
- Ну навай может на какой-нибудь сайт залезем и порушим?
- Нет, не хочу. А дай-ка ты мне лучше Лицензионное соглашение Микрософта, может стошнит.
------------------
Боюсь что для Вас курсоры будут как это соглашение.
...
Рейтинг: 0 / 0
Передача в запросе строки, формируемой из данных
    #32005988
Slava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
<Слушайте, а как энто тогда будет выглядеть с курсором? Я уже пять лет пишу проги складских и офисных типов с SQL, но ни разу не использовал курсоры... И даже слабо представляю, что это такое
Класс!!! Человек ни разу не использовал курсоры!!! Это класс!!!
Вообще я думаю, что если виртуозно владеть остальными средствами, то можно и без них.
Для справки. Курсор монжо сравнить по моему мнению с TQuery на Delphi или RecordSet на VB и т.д., отрываемоый прямо в StoredProc. Короче курсор это набор данных (виртуальная таблица) по которому можно передвигаться и присваивать переменным значения полей этого курсора. В книге напичсано что курсор это окно со скролингом накладываемое на данные. Довольно удобно реализовывать сложную логику. А иначе пришлось бы заводить кучу переменных глобальных и не очень. Советую изучить.
...
Рейтинг: 0 / 0
Передача в запросе строки, формируемой из данных
    #32005989
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Slava
Тогда другой вопрос, почему Вы считаете, что 100% не минус?

Работа реляционных СУБД построена на реляционной теории (естественно), т. е. на работе с данными как множествами а не построчно (это к вопросу о математике).
Поэтому на практике курсор - это тормоз в работе и пожиратель ресурсов, используется всегда в самых крайних случаях, когда функциональность по другому реализовать не получается. Такие случае крайне редки.

Если непонятно изложил, спросите у SergSuper он Вам точно объяснит
...
Рейтинг: 0 / 0
Передача в запросе строки, формируемой из данных
    #32005990
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Боюсь что для Вас курсоры будут как это соглашение
Я обхохотался класс!
...
Рейтинг: 0 / 0
Передача в запросе строки, формируемой из данных
    #32005991
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Raimund

А мой совет не слушать советы Slava, зачем Вам проблемы на Вашу голову?

2 Slava

Интересно сколько юзеров юзают Вашу базу, и не ходят ли они пообедать, ожидая выполнения очередного запроса?

P.S. Давно однако так не смеялся
...
Рейтинг: 0 / 0
Передача в запросе строки, формируемой из данных
    #32005992
Slava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Genady, позвольте напомнить, что мы тут собрались не показывать свою "круть", а обсуждать наилучшее решение. Если у Вас оно есть предложите. Если нет, то ...
А за моих пользователей переживать совсем не обязательно, лучше уж о своих подумайте!
...
Рейтинг: 0 / 0
Передача в запросе строки, формируемой из данных
    #32005993
Slava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Раз уж Вы Гена профи, не приведете ли Вы сравнительную характеристику использования курсоров по сравнению с решением той же задачи без них?
...
Рейтинг: 0 / 0
Передача в запросе строки, формируемой из данных
    #32005994
Raimund
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Slava
Спасбо за инфу... Собственно, это я тоже знал, но понимать потребность и знать - это разные вещи... А понимания я так и не постиг
Мда, такой разброс мнений по поводу курсоров... Мне даже любопытно стало. Так я не понял, они ускорят работу запросов или наоборот? Мне-то сие весьма актуально, когда тысячи три записей, где из восьми полей шесть калькулируются подзапросами и функциями, все время терзают юзверы... А пример эффектного (не эффективного, а эффектного ) использования, если не влом...
...
Рейтинг: 0 / 0
Передача в запросе строки, формируемой из данных
    #32005995
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ладно, Slava, простите, и не обижайтесь

Просто мне показалось, что круть начали показывать Вы.
А мой совет, впрочем как и многих на этом форуме, отказывайтесь от курсоров, везде где это можно.

А решение уже предложил SergSuper у меня круче нет
...
Рейтинг: 0 / 0
Передача в запросе строки, формируемой из данных
    #32005997
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Raimund

Если много вложенных позапросов, то лучше всего поискать несколько решений, возможно и с курсорами и с временными таблицами, а потом сравнить, что работает быстрее, вряд ли это будут решения основанные на курсорах.
...
Рейтинг: 0 / 0
Передача в запросе строки, формируемой из данных
    #32005998
Slava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Raimund
Октрою страшную тайну. Я изучаю SQL 2000 довольно недавно. Конкретных примеров с курсорами у меня. Ну вот говорят, что эта штука производительность снижает(правда не приводят ни каких оргументов). Наверно так и есть. Везде нужен эксперимент. Но вот что я думаю: "Microsoft блин большая фирма и умная да и курсор ихний инструмент. Коли они его предлогают, коли он есть, так что бы не попробовать?". Плюс ко всему в некоторых местах, по моему мнению, лучше потерять в производительности на курсоре, чем делать кучу разнообразных запросов туда и сюда, что в конце концов приведет к еще большей потере производительности. И ещё, наврное все же есть места где вообще без курсора не обойтись
...
Рейтинг: 0 / 0
Передача в запросе строки, формируемой из данных
    #32005999
Slava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Genady
SergSuper предложил не самое красивое решение. Не хочу показаться "крутым", но меня оно наверно!!! бы не устроило.
Еще раз говорю, что нужно точно посмотреть, где будет меньшая производительность.
Не могли бы Вы как-то поподробней по поводу производительности?
...
Рейтинг: 0 / 0
Передача в запросе строки, формируемой из данных
    #32006004
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
До чего ж Вы упрямы в своем невежестве, Slava.
Вас BOL, устроит?

Do not use cursors more than necessary.
Cursors are a useful tool in relational databases; however, it is almost always more expensive to use a cursor than to use a set-oriented SQL statement to accomplish a task.

In set-oriented SQL statements, the client application tells the server to update the set of records that meet specified criteria. The server figures out how to accomplish the update as a single unit of work. When updating through a cursor, the client application requires the server to maintain row locks or version information for every row, just in case the client asks to update the row after it has been fetched.

Also, using a cursor implies that the server is maintaining client state information, such as the user's current rowset at the server, usually in temporary storage. Maintaining this state for a large number of clients is an expensive use of server resources. A better strategy with a relational database is for the client application to get in and out quickly, maintaining no client state at the server between calls. Set-oriented SQL statements support this strategy.

However, if the query uses cursors, determine if the cursor query could be written more efficiently either by using a more-efficient cursor type, such as fast forward-only, or a single query. For more information, see Optimizing Application Performance Using Efficient Data Retrieval.

Хотите проверить правильность рекомендаций от Microsoft, проверяйте, я не собираюсь более доказывать Вам очивидные вещи.
...
Рейтинг: 0 / 0
Передача в запросе строки, формируемой из данных
    #32006005
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 SergSuper
>SergSuper предложил не самое красивое решение. Не хочу показаться "крутым", но меня оно наверно!!! бы не устроило.

Каково?!

2 Slava

Скажу вам по секрету, лично я не стал бы учить SergSuper красивым решениям
...
Рейтинг: 0 / 0
Передача в запросе строки, формируемой из данных
    #32006007
Slava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Genady, У всех есть личное мнение!!!
Полагаю, что Вы тоже еще чего-нибудь да не успели прочитать. Так что Вы тоже невежа???
...
Рейтинг: 0 / 0
Передача в запросе строки, формируемой из данных
    #32006008
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ладно, Slava давайте без обид, ОК?
...
Рейтинг: 0 / 0
Передача в запросе строки, формируемой из данных
    #32006009
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Genady & Slava
Не надо ссориться, горячие финские паарни.

2 Genady
Не надо обвинять кого-либо в невежестве так мимоходом.
"Не судите сами, да не судимы будете"

2 Slava

по моему мнению, лучше потерять в производительности на курсоре, чем делать кучу разнообразных запросов туда и сюда, что в конце концов приведет к еще большей потере производительности

Есть такая фраза: лучше с умным потерять, чем с глупым найти. Вот и мне кажется что уж лучше чуть помедленнее, но без курсора.

SergSuper предложил не самое красивое решение

Я прям как Ленин, уже цитируют к месту и не к месту. На самом-то деле я и ничего не предлагал. Просто кинул мысль. Как это будет реализовано, красиво или не очень - я не знал. И Вы ведь ничего не предложили. Тоже кинули мысль. Как же Вы судите что красивее?

Теперь попробую предложить.

CREATE function f(@m dec(19,6))
returns varchar(25)
AS
BEGIN
DECLARE @S VARCHAR(20)
SET @S=''
SELECT @S=@S+CONVERT(VARCHAR,L.NumberID) FROM Reklama R, Clients C, MagazinsList L
where C.ClientID=R.ClientID and R.ReclamID=L.ReklamaID
and FirmName=@FirmName
return @S
end
go

select FirmName, dbo.f(FirmName) from Reclama

Наверное это не самый лучший вариант(во всяком случае не самый "крутой").Ну предложите свой вариант и давайте сравним.
...
Рейтинг: 0 / 0
Передача в запросе строки, формируемой из данных
    #32006011
Slava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хорошо Genady.
И раз уж мы не обижаемся, то спасибо за инфу из BOL. У меня в русской книге, кстати не самой плохой!, про нерекомендованность просто ничего нет. Ан нет кое-что есть: "Всегда, когда это возможно, следует избегать исп-я курсоров и работать со стандартными командами". Эта рекомендация соблюдаетмя автоматически.
...
Рейтинг: 0 / 0
Передача в запросе строки, формируемой из данных
    #32006012
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Не надо обвинять кого-либо в невежестве так мимоходом.
>"Не судите сами, да не судимы будете"

Еще раз прошу прощения, погорячился.


>Не надо ссориться, горячие финские паарни.
...
Рейтинг: 0 / 0
Передача в запросе строки, формируемой из данных
    #32006013
Slava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 SergSuper
1. У Вас параметр @FirmName не определен.
2. Для каждой @FirmName может быть несколько записей, а на сколько я понимаю(еще раз говорю я навичок) вернуть функция может только одно значение.
P.S. Если обидел прошу прощения. Мне казалось что я выражал свою точку зрения. Все же как то надо выражать понравилось или нет.
Что-то хозин вопроса молчит! Не подозрительно ли это?
И вот еще что. Мне кажется коли мы пишем код значит предлагаем его, ну может это только "болванка", но ведь суть предложения все же остается?
...
Рейтинг: 0 / 0
Передача в запросе строки, формируемой из данных
    #32006015
Slava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 SergSuper
До меня дошло
...
Рейтинг: 0 / 0
Передача в запросе строки, формируемой из данных
    #32006016
Slava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 SergSuper
Не думаю, что смогу предложить что-то более красивое. Ну может лет через...
...
Рейтинг: 0 / 0
Передача в запросе строки, формируемой из данных
    #32006017
Slava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 SergSuper
Спасибо за то что поделились опытом!
...
Рейтинг: 0 / 0
Передача в запросе строки, формируемой из данных
    #32006018
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да не за что, всегда приятно почуствавать себя умнее других

А с параметром ошибочка вышла, должно было быть
CREATE function f(@FirmName varchar(20))
я заметил когда уже отправил, но подумал - и так понятно
...
Рейтинг: 0 / 0
31 сообщений из 31, показаны все 2 страниц
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Передача в запросе строки, формируемой из данных
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]