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

Откуда: Ростов- на- Дону
Сообщений: 564
Уважаемые коллеги!
Помогите немного, если можете.

Написал функцию

CREATE FUNCTION [dbo].[GetDocId](@item varchar(50))
RETURNS TABLE
AS
RETURN
(
select docid FROM [LIBRARY2].[dbo].[book_01010X]
where [itemid] in (SELECT [ItemID] FROM [LIBRARY2].[dbo].[book_01010] where item=@item)
)

Она работает

select docid from Book__doc where docid in (select docid from libra1.dbo.getdocid ('информатика'))

docid
------
1482
1662
...

Но мне надо, чтобы [BOOK_01010] передавалось параметром (и соответственно, [BOOK_01010X]

не знаю, как это сделать?!
22 ноя 13, 11:53    [15172986]     Ответить | Цитировать Сообщить модератору
 Re: Выполнение строк в табличной функции  [new]
Shakill
Member

Откуда: мск
Сообщений: 1882
topdon, в функции - никак
22 ноя 13, 11:59    [15173024]     Ответить | Цитировать Сообщить модератору
 Re: Выполнение строк в табличной функции  [new]
topdon
Member

Откуда: Ростов- на- Дону
Сообщений: 564
Shakill,

Вот и я забуксовал, не знаю, что и делать. Наверное, попробую путем выбора из возможных вариантов.
22 ноя 13, 12:04    [15173052]     Ответить | Цитировать Сообщить модератору
 Re: Выполнение строк в табличной функции  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
А главное такое не нужно.
22 ноя 13, 12:50    [15173428]     Ответить | Цитировать Сообщить модератору
 Re: Выполнение строк в табличной функции  [new]
Сон Веры Павловны
Member

Откуда:
Сообщений: 6149
Mnior
А главное такое не нужно.

судя по префиксу _01010Х у таблицы, сильно подозреваю, что имеет место быть случай секционирования а-ля клиппер - имеется энное количество таблиц book c одинакавой структурой: book_01010X, book_01020X, итп.
22 ноя 13, 12:53    [15173459]     Ответить | Цитировать Сообщить модератору
 Re: Выполнение строк в табличной функции  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
topdon
Вот и я забуксовал, не знаю, что и делать.


Создать вьюху, объединяющую все эти таблицы.
22 ноя 13, 12:55    [15173471]     Ответить | Цитировать Сообщить модератору
 Re: Выполнение строк в табличной функции  [new]
topdon
Member

Откуда: Ростов- на- Дону
Сообщений: 564
Сон Веры Павловны,
Нет, это не клиппер, это библиотека на SQL Server.
22 ноя 13, 13:11    [15173614]     Ответить | Цитировать Сообщить модератору
 Re: Выполнение строк в табличной функции  [new]
Гость333
Member

Откуда:
Сообщений: 3683
topdon
не знаю, что и делать

Объединить все однотипные таблицы в одну?
22 ноя 13, 13:17    [15173667]     Ответить | Цитировать Сообщить модератору
 Re: Выполнение строк в табличной функции  [new]
topdon
Member

Откуда: Ростов- на- Дону
Сообщений: 564
Сон Веры Павловны,

Вы наверное вот это имели в виду

select docid from Book__doc where docid in
(select docid FROM [LIBRARY2].[dbo].[book_01010X] where [itemid] in
(SELECT [ItemID] FROM [LIBRARY2].[dbo].[book_01010] where item='логистика'))

и просто формировать строку. Придется так и делать.
Но не хотелось бы загромождать запрос. К нему еще есть что цеплять. Но работает достаточно быстро.
22 ноя 13, 13:20    [15173689]     Ответить | Цитировать Сообщить модератору
 Re: Выполнение строк в табличной функции  [new]
topdon
Member

Откуда: Ростов- на- Дону
Сообщений: 564
Гость333,
Через UNION с добавлением одного поля с названием таблицы?
Таких таблиц около десятка и довольно большие. Все это должно работать
через Browser.
22 ноя 13, 13:23    [15173719]     Ответить | Цитировать Сообщить модератору
 Re: Выполнение строк в табличной функции  [new]
Гость333
Member

Откуда:
Сообщений: 3683
topdon
Гость333,
Через UNION с добавлением одного поля с названием таблицы?

Нет, через заливку данных в одну общую таблицу и удаление старых однотипных таблиц.
22 ноя 13, 13:36    [15173838]     Ответить | Цитировать Сообщить модератору
 Re: Выполнение строк в табличной функции  [new]
topdon
Member

Откуда: Ростов- на- Дону
Сообщений: 564
Гость333,
Нет, это невозможно, т.к. имеется работающая система, непрерывно использующая все эти таблицы.
22 ноя 13, 13:44    [15173920]     Ответить | Цитировать Сообщить модератору
 Re: Выполнение строк в табличной функции  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
topdon
Нет, это невозможно
Всё возможно, особенно имея доступ ко всему.
22 ноя 13, 17:26    [15175968]     Ответить | Цитировать Сообщить модератору
 Re: Выполнение строк в табличной функции  [new]
topdon
Member

Откуда: Ростов- на- Дону
Сообщений: 564
Mnior,
я имею доступ к основной бд только на чтение, но он мне и не нужен.
К сожалению, видимо, это действительно сделать нельзя в функции, а обойти то можно,
правда за счет загромождения запроса.
22 ноя 13, 18:09    [15176223]     Ответить | Цитировать Сообщить модератору
 Re: Выполнение строк в табличной функции  [new]
topdon
Member

Откуда: Ростов- на- Дону
Сообщений: 564
Сон Веры Павловны,
Да, так оно и есть. Это автоматизированная библиотека.
Я правда называю это избыточным индексированием.
22 ноя 13, 18:12    [15176242]     Ответить | Цитировать Сообщить модератору
 Re: Выполнение строк в табличной функции  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
topdon
я имею доступ к основной бд
И не нужно.
Если вы пишете CREATE FUNCTION, то далее уже не важно.
Вы можете просто перекроить интерфейс доступа, и называется такой паттерн - фасад.
22 ноя 13, 18:34    [15176355]     Ответить | Цитировать Сообщить модератору
 Re: Выполнение строк в табличной функции  [new]
topdon
Member

Откуда: Ростов- на- Дону
Сообщений: 564
Mnior,
Функция создается в другой БД- Libra1. А таблицы- в Library2, это видно из текста.
Но я действительно не хотел бы сливать большие таблицы только ради экономии нескольких строк текста.
22 ноя 13, 22:32    [15177246]     Ответить | Цитировать Сообщить модератору
 Re: Выполнение строк в табличной функции  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31816
topdon
Но я действительно не хотел бы сливать большие таблицы только ради экономии нескольких строк текста.
Не для экономии нескольких строк, а потому, что это правильная модель данных. Хотя бы чтоб быстрее работало, проще в сопровождении и т.п.

А для упрощения запросов используйте вьюху, объединяющую эти таблицы, как вам уже написал pkarklin.
22 ноя 13, 22:50    [15177294]     Ответить | Цитировать Сообщить модератору
 Re: Выполнение строк в табличной функции  [new]
invm
Member

Откуда: Москва
Сообщений: 9683
topdon
Но я действительно не хотел бы сливать большие таблицы только ради экономии нескольких строк текста.
Множество таблиц одинаковой структуры почти всегда, - ошибка проектирования.
22 ноя 13, 22:52    [15177302]     Ответить | Цитировать Сообщить модератору
 Re: Выполнение строк в табличной функции  [new]
topdon
Member

Откуда: Ростов- на- Дону
Сообщений: 564
invm,
Ребята, я готов согласиться с Вами, но поймите- это московская система, работает много лет (правда, осталась
без команды разработчиков), текстов у меня нет, при каждой новой книге она пишет в несколько таблиц, что я
могу здесь поделать? Мне надо модуль поиска через интернет написать.
23 ноя 13, 05:35    [15178190]     Ответить | Цитировать Сообщить модератору
 Re: Выполнение строк в табличной функции  [new]
topdon
Member

Откуда: Ростов- на- Дону
Сообщений: 564
alexeyvg,
т.е. через union c добавлением поля с именем таблицы?
23 ноя 13, 05:38    [15178192]     Ответить | Цитировать Сообщить модератору
 Re: Выполнение строк в табличной функции  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31816
topdon
alexeyvg,
т.е. через union c добавлением поля с именем таблицы?
Ну да, с добавлением поля или нет - зависит от задачи.

Только UNION ALL, а не UNION, естественно.
23 ноя 13, 14:27    [15178746]     Ответить | Цитировать Сообщить модератору
 Re: Выполнение строк в табличной функции  [new]
invm
Member

Откуда: Москва
Сообщений: 9683
Использование секционированных представлений
23 ноя 13, 14:41    [15178779]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить