¿Podemos pasar un parámetro a una vista en Microsoft SQL Server?
Traté de create view
la siguiente manera, pero no funciona:
create or replace view v_emp(eno number) as select * from emp where emp_id=&eno;
sql
sql-server
parameters
parameter-passing
views
arunachalam
fuente
fuente
Parameters are out of the discussion
demasiado audaz. ContraejemploRespuestas:
Como ya se dijo, no puedes.
Una posible solución sería implementar una función almacenada, como:
Esto le permite usarlo como una vista normal, con:
fuente
Hay 2 formas de lograr lo que desea desafortunadamente, ninguna de las cuales se puede hacer con una vista.
Puede crear una función definida por el usuario con valores de tabla que tome el parámetro que desee y devuelva un resultado de consulta
O puede hacer casi lo mismo pero crear un procedimiento almacenado en lugar de una función definida por el usuario.
Por ejemplo
el procedimiento almacenado se vería así
O la función definida por el usuario se vería así
fuente
SELECT
fácilmente: lea más .No, no puedes, como dijo Mladen Prajdic. Piense en una vista como un "filtro estático" en una tabla o una combinación de tablas. Por ejemplo: una vista puede combinar tablas
Order
y,Customer
por lo tanto, obtiene una nueva "tabla" de filasOrder
junto con nuevas columnas que contienen el nombre y el número del cliente (combinación de tablas). O puede crear una vista que seleccione solo pedidos sin procesar de laOrder
tabla (filtro estático).Luego seleccionaría de la vista como seleccionaría de cualquier otra tabla "normal": todo el filtrado "no estático" debe realizarse fuera de la vista (como "Obtener todos los pedidos para clientes llamados Miller" u "Obtener pedidos no procesados" que entró el 24 de diciembre ").
fuente
Normalmente las vistas no están parametrizadas. Pero siempre puedes inyectar algunos parámetros. Por ejemplo, usando el contexto de sesión :
Invocación:
Y otro:
DBFiddle Demo
Lo mismo es aplicable para Oracle (por supuesto, la sintaxis para la función de contexto es diferente).
fuente
¿Por qué necesita un parámetro a la vista? Podrías usar la
WHERE
cláusula.y su consulta debe hacer el trabajo:
fuente
WHERE
para la mesa, en lugar deWHERE
para la vista.Una forma hacky de hacerlo sin procedimientos almacenados o funciones sería crear una tabla de configuración en su base de datos, con las columnas Id, Param1, Param2, etc. Inserte una fila en esa tabla que contenga los valores Id = 1, Param1 = 0, Param2 = 0, etc. Luego, puede agregar una unión a esa tabla en su vista para crear el efecto deseado y actualizar la tabla de configuración antes de ejecutar la vista. Si tiene varios usuarios actualizando la tabla de configuración y ejecutando la vista al mismo tiempo, las cosas podrían salir mal, pero de lo contrario debería funcionar bien. Algo como:
fuente
No. si debe usar una función definida por el usuario a la que puede pasar parámetros.
fuente
No, una vista no se consulta de forma diferente a SELECCIONAR desde una tabla.
Para hacer lo que quiera, use una función definida por el usuario con valores de tabla con uno o más parámetros
fuente
Una vista no es más que una declaración predefinida 'SELECCIONAR'. Entonces la única respuesta real sería: No, no puedes.
Creo que lo que realmente quiere hacer es crear un procedimiento almacenado, donde, en principio, puede usar cualquier SQL válido para hacer lo que quiera, incluidos los parámetros de aceptación y los datos seleccionados.
Sin embargo, parece probable que realmente solo necesite agregar una cláusula where cuando seleccione desde su vista, pero realmente no proporcionó suficientes detalles para estar seguro.
fuente
podemos escribir un procedimiento almacenado con parámetros de entrada y luego usar ese procedimiento almacenado para obtener un conjunto de resultados de la vista. ver ejemplo a continuación.
el procedimiento almacenado es
y la vista desde la que podemos obtener el conjunto de resultados es
fuente
Como sé, la vista puede ser algo así como el comando de selección. También puede agregar parámetros a esta selección, por ejemplo, en declaraciones como esta:
fuente
No, una vista es estática. Una cosa que puede hacer (dependiendo de la versión del servidor SQl) es indexar una vista.
En su ejemplo (consultando solo una tabla), una vista indexada no tiene ningún beneficio simplemente al consultar la tabla con un índice, pero si está haciendo muchas uniones en tablas con condiciones de unión, una vista indexada puede mejorar enormemente el rendimiento.
fuente
Si no quieres usar una función, puedes usar algo como esto
Espero que ayude
fuente
no, puede pasar el parámetro al procedimiento en vista
fuente
Aquí hay una opción que no he visto hasta ahora:
Simplemente agregue la columna que desea restringir a la vista:
fuente
Puede omitir solo para ejecutar la vista, SQL se pondrá a llorar pero solo haga esto y ejecútelo. No puedes salvar.
fuente
Su vista puede hacer referencia a alguna tabla externa que contiene sus parámetros.
Como otros mencionaron, la vista en SQL Server no puede tener parámetros de entrada externos. Sin embargo, puede falsificar fácilmente una variable en su vista usando CTE. Puede ejecutarlo en su versión de SQL Server.
rendimiento de salida:
también a través de
JOIN
también a través de
CROSS APPLY
fuente
Tengo una idea que aún no he probado. Tu puedes hacer:
Sus parámetros se guardarán y cambiarán en la tabla de configuración.
fuente
Realicé esta tarea para mis necesidades de la siguiente manera
fuente