Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Wie rufe ich eine gespeicherte Prozedur in einer Ansicht auf?

Diese Konstruktion ist in SQL Server nicht zulässig. Eine Inline-Tabellenwertfunktion kann als parametrisierte Ansicht ausgeführt werden, darf aber dennoch keinen SP wie diesen aufrufen.

Hier sind einige Beispiele für die austauschbare Verwendung eines SP und eines Inline-TVF - Sie werden sehen, dass das TVF flexibler ist (es ist im Grunde eher eine Ansicht als eine Funktion). nutzbar:

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