Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Передача в запросе строки, формируемой из данных
|
|||
|---|---|---|---|
|
#18+
Запрос типа: 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)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2001, 12:19 |
|
||
|
Передача в запросе строки, формируемой из данных
|
|||
|---|---|---|---|
|
#18+
использовать курсоры ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2001, 15:53 |
|
||
|
Передача в запросе строки, формируемой из данных
|
|||
|---|---|---|---|
|
#18+
Не работает, потому что в селекте можно или присваивать, или выбирать данные. Одновременно нельзя. А такой запрос работать будет: 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, то из этого запроса сделайте функцию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2001, 16:58 |
|
||
|
Передача в запросе строки, формируемой из данных
|
|||
|---|---|---|---|
|
#18+
А я бы наверно всеже использовал cursor. Немного кода на открытие, закрытие и освобождение, зато за одну операцию можно присвоить сразу нескольким переменным нужные значения, плюс возможность перемещаться по данным. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2001, 05:30 |
|
||
|
Передача в запросе строки, формируемой из данных
|
|||
|---|---|---|---|
|
#18+
2 Slava > плюс возможность перемещаться по данным. Вы полагаете это плюс!? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2001, 09:30 |
|
||
|
Передача в запросе строки, формируемой из данных
|
|||
|---|---|---|---|
|
#18+
<Вы полагаете это плюс!? 100% не минус, а раз в математике другого не дано, значит плюс. И все же что Вы имеете в виду? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2001, 10:11 |
|
||
|
Передача в запросе строки, формируемой из данных
|
|||
|---|---|---|---|
|
#18+
Слушайте, а как энто тогда будет выглядеть с курсором? Я уже пять лет пишу проги складских и офисных типов с SQL, но ни разу не использовал курсоры... И даже слабо представляю, что это такое... ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2001, 10:26 |
|
||
|
Передача в запросе строки, формируемой из данных
|
|||
|---|---|---|---|
|
#18+
2 Raimund Анекдот(старый правда): ------------------ Хакер просыпается после пьянки, всё болит и т.д. Жена(тоже хакерша) подходит: - Давай может какую защиту у программы вскроем, может полегчает? - Нет, не хочу. - Ну навай может на какой-нибудь сайт залезем и порушим? - Нет, не хочу. А дай-ка ты мне лучше Лицензионное соглашение Микрософта, может стошнит. ------------------ Боюсь что для Вас курсоры будут как это соглашение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2001, 10:43 |
|
||
|
Передача в запросе строки, формируемой из данных
|
|||
|---|---|---|---|
|
#18+
<Слушайте, а как энто тогда будет выглядеть с курсором? Я уже пять лет пишу проги складских и офисных типов с SQL, но ни разу не использовал курсоры... И даже слабо представляю, что это такое Класс!!! Человек ни разу не использовал курсоры!!! Это класс!!! Вообще я думаю, что если виртуозно владеть остальными средствами, то можно и без них. Для справки. Курсор монжо сравнить по моему мнению с TQuery на Delphi или RecordSet на VB и т.д., отрываемоый прямо в StoredProc. Короче курсор это набор данных (виртуальная таблица) по которому можно передвигаться и присваивать переменным значения полей этого курсора. В книге напичсано что курсор это окно со скролингом накладываемое на данные. Довольно удобно реализовывать сложную логику. А иначе пришлось бы заводить кучу переменных глобальных и не очень. Советую изучить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2001, 10:46 |
|
||
|
Передача в запросе строки, формируемой из данных
|
|||
|---|---|---|---|
|
#18+
2 Slava Тогда другой вопрос, почему Вы считаете, что 100% не минус? Работа реляционных СУБД построена на реляционной теории (естественно), т. е. на работе с данными как множествами а не построчно (это к вопросу о математике). Поэтому на практике курсор - это тормоз в работе и пожиратель ресурсов, используется всегда в самых крайних случаях, когда функциональность по другому реализовать не получается. Такие случае крайне редки. Если непонятно изложил, спросите у SergSuper он Вам точно объяснит ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2001, 10:47 |
|
||
|
Передача в запросе строки, формируемой из данных
|
|||
|---|---|---|---|
|
#18+
>Боюсь что для Вас курсоры будут как это соглашение Я обхохотался класс! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2001, 10:49 |
|
||
|
Передача в запросе строки, формируемой из данных
|
|||
|---|---|---|---|
|
#18+
2 Raimund А мой совет не слушать советы Slava, зачем Вам проблемы на Вашу голову? 2 Slava Интересно сколько юзеров юзают Вашу базу, и не ходят ли они пообедать, ожидая выполнения очередного запроса? P.S. Давно однако так не смеялся ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2001, 10:53 |
|
||
|
Передача в запросе строки, формируемой из данных
|
|||
|---|---|---|---|
|
#18+
Genady, позвольте напомнить, что мы тут собрались не показывать свою "круть", а обсуждать наилучшее решение. Если у Вас оно есть предложите. Если нет, то ... А за моих пользователей переживать совсем не обязательно, лучше уж о своих подумайте! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2001, 11:03 |
|
||
|
Передача в запросе строки, формируемой из данных
|
|||
|---|---|---|---|
|
#18+
Раз уж Вы Гена профи, не приведете ли Вы сравнительную характеристику использования курсоров по сравнению с решением той же задачи без них? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2001, 11:08 |
|
||
|
Передача в запросе строки, формируемой из данных
|
|||
|---|---|---|---|
|
#18+
2 Slava Спасбо за инфу... Собственно, это я тоже знал, но понимать потребность и знать - это разные вещи... А понимания я так и не постиг Мда, такой разброс мнений по поводу курсоров... Мне даже любопытно стало. Так я не понял, они ускорят работу запросов или наоборот? Мне-то сие весьма актуально, когда тысячи три записей, где из восьми полей шесть калькулируются подзапросами и функциями, все время терзают юзверы... А пример эффектного (не эффективного, а эффектного ) использования, если не влом... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2001, 11:08 |
|
||
|
Передача в запросе строки, формируемой из данных
|
|||
|---|---|---|---|
|
#18+
Ладно, Slava, простите, и не обижайтесь Просто мне показалось, что круть начали показывать Вы. А мой совет, впрочем как и многих на этом форуме, отказывайтесь от курсоров, везде где это можно. А решение уже предложил SergSuper у меня круче нет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2001, 11:09 |
|
||
|
Передача в запросе строки, формируемой из данных
|
|||
|---|---|---|---|
|
#18+
2 Raimund Если много вложенных позапросов, то лучше всего поискать несколько решений, возможно и с курсорами и с временными таблицами, а потом сравнить, что работает быстрее, вряд ли это будут решения основанные на курсорах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2001, 11:13 |
|
||
|
Передача в запросе строки, формируемой из данных
|
|||
|---|---|---|---|
|
#18+
2 Raimund Октрою страшную тайну. Я изучаю SQL 2000 довольно недавно. Конкретных примеров с курсорами у меня. Ну вот говорят, что эта штука производительность снижает(правда не приводят ни каких оргументов). Наверно так и есть. Везде нужен эксперимент. Но вот что я думаю: "Microsoft блин большая фирма и умная да и курсор ихний инструмент. Коли они его предлогают, коли он есть, так что бы не попробовать?". Плюс ко всему в некоторых местах, по моему мнению, лучше потерять в производительности на курсоре, чем делать кучу разнообразных запросов туда и сюда, что в конце концов приведет к еще большей потере производительности. И ещё, наврное все же есть места где вообще без курсора не обойтись ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2001, 11:21 |
|
||
|
Передача в запросе строки, формируемой из данных
|
|||
|---|---|---|---|
|
#18+
2 Genady SergSuper предложил не самое красивое решение. Не хочу показаться "крутым", но меня оно наверно!!! бы не устроило. Еще раз говорю, что нужно точно посмотреть, где будет меньшая производительность. Не могли бы Вы как-то поподробней по поводу производительности? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2001, 11:23 |
|
||
|
Передача в запросе строки, формируемой из данных
|
|||
|---|---|---|---|
|
#18+
До чего ж Вы упрямы в своем невежестве, 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, проверяйте, я не собираюсь более доказывать Вам очивидные вещи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2001, 11:34 |
|
||
|
Передача в запросе строки, формируемой из данных
|
|||
|---|---|---|---|
|
#18+
2 SergSuper >SergSuper предложил не самое красивое решение. Не хочу показаться "крутым", но меня оно наверно!!! бы не устроило. Каково?! 2 Slava Скажу вам по секрету, лично я не стал бы учить SergSuper красивым решениям ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2001, 11:38 |
|
||
|
Передача в запросе строки, формируемой из данных
|
|||
|---|---|---|---|
|
#18+
Genady, У всех есть личное мнение!!! Полагаю, что Вы тоже еще чего-нибудь да не успели прочитать. Так что Вы тоже невежа??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2001, 11:52 |
|
||
|
Передача в запросе строки, формируемой из данных
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2001, 11:57 |
|
||
|
Передача в запросе строки, формируемой из данных
|
|||
|---|---|---|---|
|
#18+
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 Наверное это не самый лучший вариант(во всяком случае не самый "крутой").Ну предложите свой вариант и давайте сравним. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2001, 12:02 |
|
||
|
Передача в запросе строки, формируемой из данных
|
|||
|---|---|---|---|
|
#18+
Хорошо Genady. И раз уж мы не обижаемся, то спасибо за инфу из BOL. У меня в русской книге, кстати не самой плохой!, про нерекомендованность просто ничего нет. Ан нет кое-что есть: "Всегда, когда это возможно, следует избегать исп-я курсоров и работать со стандартными командами". Эта рекомендация соблюдаетмя автоматически. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2001, 12:06 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=32005988&tid=1826722]: |
0ms |
get settings: |
8ms |
get forum list: |
18ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
40ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
57ms |
get tp. blocked users: |
1ms |
| others: | 216ms |
| total: | 361ms |

| 0 / 0 |
