¿Cómo llamar a un procedimiento almacenado en una vista?
¿Cómo llamaría a un Procedimiento almacenado que devuelve datos en una vista? ¿Es esto posible?
6 answers
Esta construcción no está permitida en SQL Server. Una función con valor de tabla en línea puede funcionar como una vista parametrizada, pero todavía no se le permite llamar a un SP como este.
Aquí hay algunos ejemplos de usar un SP y un TVF inline indistintamente-verás que el TVF es más flexible (básicamente se parece más a una vista que a una función), por lo que donde se puede usar un TVF inline, 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
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-05-27 18:30:15
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
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-10-22 11:07:43
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 del procedimiento almacenado necesitamos 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
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-04-14 01:02:06
Si está utilizando Sql Server 2005 puede utilizar funciones con valores de tabla. Usted puede llamar a estos directamente y pasar parámetros, mientras que tratarlos como si fueran tablas.
Para obtener más información, consulte Funciones Definidas por el Usuario con valores de tabla
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-05-16 22:59:54
Tendría que escribir la vista como a continuación. Esencialmente escribiría los resultados de su proc en una tabla var o tabla temp, 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 a una tabla temporal.
**Edit 2 ** - Los comentarios son correctos de que un sproc no se puede leer en una vista como sugerí. En su lugar, convierta su proc a una función de valor de tabla como se mencionó en otros mensajes y seleccione de que:
create view sampleView
as select field1, field2, ...
from dbo.MyTableValueFunction
Me disculpo por la confusión
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-05-27 18:41:26
create view sampleView as
select field1, field2, ...
from dbo.MyTableValueFunction
Tenga en cuenta que incluso si su función Mytablevaluuefunction no acepta ningún parámetro, aún debe incluir paréntesis después de él, es decir:
... from dbo.MyTableValueFunction()
Sin los paréntesis, obtendrá un error de "Nombre de objeto no válido".
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-08-05 09:16:15