sql >> Databasteknik >  >> RDS >> Sqlserver

Hur ringer man lagrad procedur i en vy?

Denna konstruktion är inte tillåten i SQL Server. En inline-tabellvärderad funktion kan fungera som en parametriserad vy, men är fortfarande inte tillåten att anropa en SP som denna.

Här är några exempel på att använda en SP och en inline TVF omväxlande - du kommer att se att TVF är mer flexibel (det är i grunden mer som en vy än en funktion), så där en inline TVF kan användas, kan de vara mer om- användbar:

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


  1. Fönsterhantering i Oracle D2k Forms

  2. Subtrahera år från ett datum i SQLite

  3. SQL SELECT för att få de första N positiva heltalen

  4. Ansible älskar PostgreSQL