|
Как написать UDF?
|
|||
---|---|---|---|
#18+
Приветствую! Есть 3 таблицы, одна из которых, соединяя 2 крайние, реализует связь М:М. Authors(auth_id, name); bk2auth(auth_id, bk_id); books(bk_id....). Как мне написать UDF, к-рая возвращала бы мне имя автора книги, а если их несколько, - то все ч/з запятую? Премного благодарен ... |
|||
:
Нравится:
Не нравится:
|
|||
15.03.2001, 19:50 |
|
Как написать UDF?
|
|||
---|---|---|---|
#18+
Подобная задача обычно решается с помощью цикла по курсору. Следует только учесть, что использовать в теле UDF глобальные курсоры запрещено. Правда, можно использовать локальные. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.03.2001, 20:43 |
|
Как написать UDF?
|
|||
---|---|---|---|
#18+
Очень просто: CREATE FUNCTION bk2auth (@bk varchar(x)) RETURNS TABLE AS select auth_name from Authors A, BK2AUTH C where A.au_id=C.au_id and C.bk_id in (select bk_id from BOOKS where bk_name=@bk) А вот через запятую можно ADO используя, вывести ... |
|||
:
Нравится:
Не нравится:
|
|||
16.03.2001, 00:18 |
|
Как написать UDF?
|
|||
---|---|---|---|
#18+
Скажи "Нет!" курсорам и циклам! Минимум работы в клиентской части! Ребята(Garya и codd), ну что ж вы ерунду советуете? create function ff(@n varchar(50)) returns varchar(500) as begin declare @s varchar(500) set @s='' select @s=@s+name+',' from sysobjects where name like @n if @s<>'' set @s=substring(@s,1,datalength(@s)-1) return @s end go create table #t(c varchar(20)) insert #t select 'syso%' insert #t select 'sysc%' insert #t select 'sysp%' go select c, dbo.ff(c) from #t Пойдет так? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.03.2001, 09:55 |
|
Как написать UDF?
|
|||
---|---|---|---|
#18+
2codd: этот способ можно было бы рассматривать как альтернативу, но в случае, если мне эта UDF нужна была для работы клиентского приложения. Но мне необходимо было использовать ее в самих запросах. А я не сформулировал это как надо в вопросе. 2Garya: Я тоже склонялся к такому варианту, пока не прочитал вариант SergSuper. 2SergSuper: Ну что же я могу сказать? У меня просто нет слов. Воистину: некоторые вещи необходимо просто знать. Всем огромное спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
16.03.2001, 15:38 |
|
Как написать UDF?
|
|||
---|---|---|---|
#18+
2SergSuper. Что я могу сказать? Мне понравилось . Похожее решение было в рассылке Александра Гладченко по Update (через два знака равенства). Чесслово, очень симпатично. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2001, 16:27 |
|
Как написать UDF?
|
|||
---|---|---|---|
#18+
Ну и спасибо, SergSuper. Эдак походя прочитал, и модифицировал за 2 часа 8 процедур, избавившись от курсоров. Причем код упростился до уровня понимания его разработчиком. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2001, 17:23 |
|
|
start [/forum/topic.php?fid=46&msg=32003087&tid=1827171]: |
0ms |
get settings: |
7ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
41ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
48ms |
get tp. blocked users: |
2ms |
others: | 283ms |
total: | 419ms |
0 / 0 |