Я бы сделал это так:
<% @array.limit(10).each do |a| %>
Прочитав здесь многие ответы, я хотел бы отметить, что существует большая разница между встроенной функцией с табличным значением и любыми другими функциями (скалярными или многострочными TVF).
Встроенный TVF - это просто параметризованное представление. Его можно расширять и оптимизировать, как и вид. Не требуется ничего материализовать перед "возвратом результатов" или чем-то подобным (хотя, к сожалению, синтаксис имеет RETURN
.
Я обнаружил большое преимущество встроенного TVF по сравнению с представлением заключается в том, что он вызывает требуемую параметризацию, тогда как с представлением вы должны предположить, что вызывающий будет соответствующим образом присоединиться к представлению или ограничить его использование.
Например, у нас есть много больших таблиц фактов в DW с типичной звездной моделью Кимбалла . У меня есть мнение о модели, ориентированной на таблицу фактов, который вызывается без каких-либо ограничений, вернет сотни миллионов строк. Используя встроенный TVF с соответствующей параметризацией, пользователи не могут случайно запросить все строки. Производительность между ними во многом неотличима.
Без разницы. Они оба развернуты / не вложены в содержащий запрос.
Примечание: индексированные представления рассматриваются по-разному, но все же могут быть расширены, а многозначные табличные функции являются черными ящиками для содержащего запроса.
Страшный администратор базы данных (в конце)
Наконец, запись в таблицы в функциях не разрешена
Редактировать после комментария Эрика З. Бирда и отрицательного голоса ...
Вопрос и ответы (не только мой ) не о скалярных udfs. «Встроенный» означает «
Обновление: Похоже, я пропустил «встроенную» часть. Однако я оставляю здесь ответ на тот случай, если кто-то захочет прочитать о различиях между ВИДАМИ и обычными функциями.
Если у вас есть только функция, которая выполняет SELECT и выводит данные, то они похожи. Однако даже в этом случае они не совпадают, потому что ПРОСМОТРЫ могут быть оптимизированы движком. Например, если вы запустите SELECT * FROM view1 WHERE x = 10; и у вас есть индекс в поле таблицы, которое сопоставляется с X, тогда оно будет использоваться. С другой стороны, функция создает набор результатов перед поиском, поэтому вам придется переместить WHERE внутри него - однако это непросто, потому что у вас может быть много столбцов, и вы не можете ЗАКАЗАТЬ их все в одном операторе select.
Следовательно, если вы сравниваете представления и функции для одного и того же задача дать «представление» о данных, тогда ВИДЫ - лучший выбор.
НО, функции могут делать гораздо больше. Вы можете выполнять несколько запросов без необходимости объединять таблицы с помощью JOINS или UNION. Вы можете выполнять сложные вычисления с результатами, выполнять дополнительные запросы и выводить данные пользователю. Функции больше похожи на хранимые процедуры, которые могут возвращать наборы данных, чем на представления.
если вы сравниваете представления и функции для одной и той же задачи предоставления «представления» над данными, то представления VIEW - лучший выбор.НО функции могут делать гораздо больше. Вы можете выполнять несколько запросов без необходимости объединять таблицы с помощью JOINS или UNION. Вы можете выполнять сложные вычисления с результатами, выполнять дополнительные запросы и выводить данные пользователю. Функции больше похожи на хранимые процедуры, которые могут возвращать наборы данных, чем на представления.
если вы сравниваете представления и функции для одной и той же задачи предоставления «представления» над данными, то представления VIEW - лучший выбор.НО функции могут делать гораздо больше. Вы можете выполнять несколько запросов без необходимости объединять таблицы с помощью JOINS или UNION. Вы можете выполнять сложные вычисления с результатами, выполнять дополнительные запросы и выводить данные пользователю. Функции больше похожи на хранимые процедуры, которые могут возвращать наборы данных, чем на представления.
Отвечая на ваш вопрос об обновлениях в функции ( msdn ):
Единственные изменения, которые могут быть сделаны операторы в функции изменения в объектах, локальных для функции, такие как локальные курсоры или переменные. Изменения в базе данных таблицы, операции над курсорами, которые не локально для функции, отправляя электронная почта, попытка открыть каталог модификация и создание результата набор, который возвращается пользователю, примеры действий, которые нельзя выполняется в функции.
Одно большое отличие состоит в том, что функция может принимать параметры, а VIEW - нет.
Я предпочитаю VIEW, поскольку они являются стандартной и, следовательно, переносимой реализацией. Я использую функции, когда эквивалентный VIEW был бы бессмысленным без предложения WHERE.
Например, у меня есть функция, которая запрашивает относительно большую таблицу состояний действительного времени (таблица «история»). Если бы это был ПРОСМОТР, и вы попытались бы запросить его без предложения WHERE, вы бы получили много достоверных данных (в конечном итоге!). Использование функции устанавливает контракт, который, если вам нужны данные, вы должны предоставить идентификатор клиента, дата начала и дата окончания, и функция заключается в том, как я устанавливаю этот контакт. Почему не хранимая процедура? Что ж, я ожидаю, что пользователь захочет ПРИСОЕДИНЯТЬСЯ к набору результатов с дополнительными данными (таблицами, представлениями, функциями,
Представление - это "представление" данных, которые возвращается из запроса, почти псевдотаблица. Функция возвращает значение / таблицу, обычно получаемую при запросе данных. Вы можете запустить любой оператор sql в функции при условии, что функция в конечном итоге вернет значение / таблицу.
Функция позволяет передавать параметры для создания более конкретного представления. Допустим, вы хотели привлечь клиентов в зависимости от состояния. Функция позволит вам перейти в состояние, которое вы ищете, и предоставить вам всех клиентов в этом состоянии. Представление не может этого сделать.
Функция выполняет задачу или несколько задач. Представление извлекает данные через запрос. То, что подходит под этот запрос, ограничено и вами. В функции я могу обновлять, выбирать, создавать переменные таблицы, удалять некоторые данные, отправлять электронную почту, взаимодействовать с созданной мной CLR и т. Д. Намного более мощно, чем простое представление!