sql >> Databáze >  >> RDS >> Sqlserver

Jak volat uloženou proceduru v pohledu?

Tato konstrukce není v SQL Server povolena. Vložená funkce s hodnotou tabulky může fungovat jako parametrizovaný pohled, ale stále není povoleno volat SP takto.

Zde je několik příkladů zaměnitelnosti SP a inline TVF – uvidíte, že TVF je flexibilnější (v zásadě je to spíše pohled než funkce), takže tam, kde lze použít inline TVF, mohou být více 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


  1. Nejlepší způsob, jak hostovat MySQL v Azure Cloud

  2. Zjednodušení testování jednotky Hlavní uložená procedura, která také nazývá proceduru utility

  3. AKTUALIZACE PHP MYSQL, pokud existuje, nebo INSERT, pokud ne?

  4. Jak mohu zabránit Postgresu vložit poddotaz?