Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Comment appeler une procédure stockée dans une vue ?

Cette construction n'est pas autorisée dans SQL Server. Une fonction de table en ligne peut fonctionner comme une vue paramétrée, mais n'est toujours pas autorisée à appeler un SP comme celui-ci.

Voici quelques exemples d'utilisation interchangeable d'un SP et d'un TVF en ligne - vous verrez que le TVF est plus flexible (il ressemble plus à une vue qu'à une fonction), donc lorsqu'un TVF en ligne peut être utilisé, ils peuvent être plus ré- utilisable :

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