¿Cómo puedo llamar a un procedimiento almacenado que devuelve datos en una vista? ¿Esto es posible?¿Cómo llamar al procedimiento almacenado en una vista?
Respuesta
Esta construcción no está permitido en SQL Server. Una función en línea con valores de tabla puede funcionar como una vista parametrizada, pero todavía no puede llamar a un SP como este.
Aquí hay algunos ejemplos del uso de un SP y un TVF en línea indistintamente: verá que el TVF es más flexible (es más como una vista que como una función), de modo que cuando se puede usar un TVF en línea, pueden ser más re-eusable:
CREATE TABLE dbo.so916784 (
num int
)
GO
INSERT INTO dbo.so916784 VALUES (0)
INSERT INTO dbo.so916784 VALUES (1)
INSERT INTO dbo.so916784 VALUES (2)
INSERT INTO dbo.so916784 VALUES (3)
INSERT INTO dbo.so916784 VALUES (4)
INSERT INTO dbo.so916784 VALUES (5)
INSERT INTO dbo.so916784 VALUES (6)
INSERT INTO dbo.so916784 VALUES (7)
INSERT INTO dbo.so916784 VALUES (8)
INSERT INTO dbo.so916784 VALUES (9)
GO
CREATE PROCEDURE dbo.usp_so916784 @mod AS int
AS
BEGIN
SELECT *
FROM dbo.so916784
WHERE num % @mod = 0
END
GO
CREATE FUNCTION dbo.tvf_so916784 (@mod AS int)
RETURNS TABLE
AS
RETURN
(
SELECT *
FROM dbo.so916784
WHERE num % @mod = 0
)
GO
EXEC dbo.usp_so916784 3
EXEC dbo.usp_so916784 4
SELECT * FROM dbo.tvf_so916784(3)
SELECT * FROM dbo.tvf_so916784(4)
DROP FUNCTION dbo.tvf_so916784
DROP PROCEDURE dbo.usp_so916784
DROP TABLE dbo.so916784
Debería guiar la Vista como a continuación.
Básicamente, escribiría los resultados de su proceso en una mesa var o tabla temporal, luego seleccionaría en la vista.
Editar - Si puede cambiar su procedimiento almacenado a una función de valor de tabla, eliminaría el paso de seleccionar una tabla temporal.
** Editar 2 ** - Los comentarios son correctos que un sproc no se puede leer en una vista como sugerí. En su lugar, convertir su proc para una función de tabla de valores como se ha mencionado en otros puestos y seleccionar de que:
create view sampleView
as select field1, field2, ...
from dbo.MyTableValueFunction
Me disculpo por la confusión
Estoy bastante seguro de que no se puede hacer esto en SQL Server. –
En realidad, estoy seguro de que no puede hacer esto, porque las vistas no pueden tener bloques BEGIN END en primer lugar. –
Estás en lo cierto ... invirtiendo. Sé que he poblado vistas antes de una manera similar. –
Si está utilizando SQL Server 2005 puede utilizar las funciones con valores de tabla . Puede llamarlos directamente y pasar parámetros, mientras los trata como si fueran tablas.
Para más información echa un vistazo a Table-Valued User-Defined Functions
Parece que las funciones con valores de tabla también están disponibles en SQL Server 2000: http://www.devarticles.com/c/a/SQL-Server/Creating-User-Fin-Functions-In-SQL-Server- 2000/4/ – polara
create view sampleView as
select field1, field2, ...
from dbo.MyTableValueFunction
Tenga en cuenta que incluso si su MyTableValueFunction no acepta ningún parámetro, que todavía tienen que incluir paréntesis después de él, es decir:
... from dbo.MyTableValueFunction()
Sin los paréntesis, recibirá un error de "Nombre de objeto inválido".
exec sp_addlinkedserver
@server = 'local',
@srvproduct = '',
@provider='SQLNCLI',
@datasrc = @@SERVERNAME
go
create view ViewTest
as
select * from openquery(local, 'sp_who')
go
select * from ViewTest
go
Intenté esto pero cuando intento ejecutar la selección * de openquery, me dice: Proveedor OLE DB "SQLNCLI11" para el servidor vinculado "local" devuelto mensaje "Tiempo de espera de inicio de sesión expirado". –
Pude llamar al procedimiento almacenado en una vista (SQL Server 2005).
CREATE FUNCTION [dbo].[dimMeasure]
RETURNS TABLE AS
(
SELECT * FROM OPENROWSET('SQLNCLI', 'Server=localhost; Trusted_Connection=yes;', 'exec ceaw.dbo.sp_dimMeasure2')
)
RETURN
GO
Dentro procedimiento almacenado tenemos que establecer:
set nocount on
SET FMTONLY OFF
CREATE VIEW [dbo].[dimMeasure]
AS
SELECT * FROM OPENROWSET('SQLNCLI', 'Server=localhost;Trusted_Connection=yes;', 'exec ceaw.dbo.sp_dimMeasure2')
GO
CREATE VIEW [dbo].[dimMeasure]
AS
SELECT * FROM OPENROWSET('SQLNCLI', 'Server=localhost;Trusted_Connection=yes;'
, 'exec ceaw.dbo.sp_dimMeasure2')
GO
En lugar de publicar otra respuesta con la otra mitad de la respuesta, ¿qué hay de la edición de la anterior para incluir todo lo que pretendía? (Lo he hecho por usted, compruebe que lo hice correctamente). Ahora elimínelo, a menos que realmente tenga dos respuestas diferentes a la misma pregunta. –
- 1. ¿Cómo llamar al procedimiento almacenado por hibernación?
- 2. Llamar al procedimiento almacenado con los parámetros
- 3. Cómo llamar a un procedimiento almacenado desde otro procedimiento almacenado?
- 4. Procedimiento almacenado al ejecutar otro procedimiento almacenado
- 5. ¿Cómo llamar al procedimiento almacenado de MySQL desde Rails?
- 6. Cómo llamar a una función escalar en un procedimiento almacenado
- 7. Llamar a un procedimiento almacenado con asp.net
- 8. ASP.NET MVC: mejor manera de llamar al procedimiento almacenado
- 9. Llamar al procedimiento almacenado con el valor de retorno
- 10. ¿Llamar al procedimiento almacenado de Oracle desde C#?
- 11. Cómo llamar a un procedimiento almacenado (con parámetros) desde otro procedimiento almacenado sin tabla temporal
- 12. Llamar a un procedimiento almacenado python
- 13. Cómo llamar a la función C# en el procedimiento almacenado
- 14. Llamar a un procedimiento almacenado en un procedimiento almacenado en MySQL
- 15. llamando al procedimiento almacenado desde solr
- 16. Llamar a procedimiento almacenado de otro SQL procedimiento almacenado del servidor
- 17. Llamar a un procedimiento almacenado con otro en Oracle
- 18. Llamar procedimiento almacenado dentro de TransactionScope en Entity Framework
- 19. Llamar a un procedimiento almacenado en SQL CTE
- 20. Llamar a un procedimiento almacenado de Oracle en Squirrel SQL
- 21. ¿Cómo desactivo los resultados de la consulta al ejecutar un procedimiento almacenado desde un procedimiento almacenado?
- 22. Procedimiento almacenado asincrónico Llamadas
- 23. ¿Cómo programar un procedimiento almacenado?
- 24. Problemas al llamar al procedimiento almacenado desde C# con CLOB grande
- 25. Llamar al procedimiento almacenado de SQL con parámetro de salida en VBScript
- 26. ¿Cómo puedo llamar al procedimiento almacenado pl/sql (función, devolver el valor numérico)?
- 27. Llamar a un procedimiento almacenado con XML Datatype
- 28. ¿Puedo llamar a un procedimiento almacenado con criterios de hibernación?
- 29. Cómo guardar un procedimiento almacenado?
- 30. agregando una columna en el procedimiento almacenado
duplicado: http://stackoverflow.com/questions/349979/execute-a-sql-stored -proc-from-a-sql-view – Russ