Можем ли мы передать параметр в представление в Microsoft SQL Server?
Пытался сделать create view
так, но не получается:
create or replace view v_emp(eno number) as select * from emp where emp_id=&eno;
sql
sql-server
parameters
parameter-passing
views
Аруначалам
источник
источник
Parameters are out of the discussion
Слишком смелое заявление. КонтрпримерОтветы:
Как уже было сказано, вы не можете.
Возможное решение - реализовать сохраненную функцию, например:
Это позволяет вам использовать его как обычный вид с:
источник
Есть два способа добиться того, чего вы хотите, к сожалению, ни один из них нельзя сделать с помощью представления.
Вы можете создать пользовательскую функцию с табличным значением, которая принимает нужный параметр и возвращает результат запроса.
Или вы можете сделать почти то же самое, но создать хранимую процедуру вместо определяемой пользователем функции.
Например
хранимая процедура будет выглядеть как
Или определяемая пользователем функция будет выглядеть как
источник
SELECT
: прочитайте больше .Нет, как сказал Младен Прайдич. Думайте о представлении как о «статическом фильтре» для таблицы или комбинации таблиц. Например: представление может объединять таблицы,
Order
иCustomer
поэтому вы получаете новую «таблицу» строкOrder
вместе с новыми столбцами, содержащими имя клиента и номер клиента (комбинация таблиц). Или вы можете создать представление, которое выбирает изOrder
таблицы только необработанные заказы (статический фильтр).Затем вы выбираете из представления, как если бы вы выбирали из любой другой «нормальной» таблицы - вся «нестатическая» фильтрация должна выполняться вне представления (например, «Получить все заказы для клиентов по имени Миллер» или «Получить необработанные заказы это произошло 24 декабря »).
источник
Обычно представления не параметризуются. Но вы всегда можете ввести некоторые параметры. Например, используя контекст сеанса :
Призвание:
И другой:
DBFiddle Demo
То же самое применимо и к Oracle (конечно, синтаксис контекстной функции другой).
источник
Зачем нужен параметр в поле зрения? Вы можете просто использовать
WHERE
предложение.и ваш запрос должен сработать:
источник
WHERE
для таблицы, а неWHERE
для представления.Хакерский способ сделать это без хранимых процедур или функций - создать таблицу настроек в вашей базе данных со столбцами Id, Param1, Param2 и т. Д. Вставить строку в эту таблицу, содержащую значения Id = 1, Param1 = 0, Param2. = 0 и т. Д. Затем вы можете добавить соединение к этой таблице в своем представлении, чтобы создать желаемый эффект, и обновить таблицу настроек перед запуском представления. Если у вас есть несколько пользователей, которые обновляют таблицу настроек и одновременно запускают представление, все может пойти не так, но в остальном все должно работать нормально. Что-то вроде:
источник
нет. если вы должны затем использовать определяемую пользователем функцию, в которую вы можете передавать параметры.
источник
Нет, представление запрашивается точно так же, как ВЫБОР из таблицы.
Чтобы делать то, что вы хотите, используйте определяемую пользователем функцию с табличным значением с одним или несколькими параметрами.
источник
Представление - это не что иное, как предопределенный оператор SELECT. Итак, единственный реальный ответ: нет, нельзя.
Я думаю, что вы действительно хотите создать хранимую процедуру, где в принципе вы можете использовать любой допустимый SQL для выполнения любых действий, включая принятие параметров и выбор данных.
Кажется вероятным, что вам действительно нужно добавить предложение where только при выборе из своего представления, но вы на самом деле не предоставили достаточно деталей, чтобы быть уверенным.
источник
мы можем написать хранимую процедуру с входными параметрами, а затем использовать эту хранимую процедуру для получения набора результатов из представления. см. пример ниже.
хранимая процедура
и представление, из которого мы можем получить набор результатов,
источник
Насколько я знаю, представление может быть чем-то вроде команды выбора. Вы также можете добавить параметры к этому выбору, например, в следующих операторах where:
источник
Нет, представление статично. Единственное, что вы можете сделать (в зависимости от версии сервера SQl), - это проиндексировать представление.
В вашем примере (запрос только одной таблицы) индексированное представление не имеет преимуществ по сравнению с простым запросом таблицы с индексом на ней, но если вы выполняете много объединений в таблицах с условиями объединения, индексированное представление может значительно повысить производительность.
источник
Если вы не хотите использовать функцию, вы можете использовать что-то вроде этого
Надеюсь, это поможет
источник
нет, вы можете передать параметр рассматриваемой процедуре
источник
Вот вариант, который я пока не видел:
Просто добавьте столбец, который вы хотите ограничить представлением:
источник
Вы можете обойти, просто чтобы запустить представление, SQL будет винить и плакать, но просто сделайте это и запустите! Вы не можете сэкономить.
источник
Ваше представление может ссылаться на некоторую внешнюю таблицу, содержащую ваши параметры.
Как уже упоминалось, представление в SQL Server не может иметь внешних входных параметров. Однако вы можете легко подделать переменную в своем представлении с помощью CTE. Вы можете протестировать его в своей версии SQL Server.
дающий результат:
также через
JOIN
также через
CROSS APPLY
источник
У меня есть идея, которую я еще не пробовал. Ты можешь сделать:
Ваши параметры будут сохранены и изменены в таблице конфигурации.
источник
Я реализовал эту задачу для своих нужд следующим образом
источник