2013-06-05 13 views

risposta

6

sintassi sbagliato, questo è tutto. Non è necessario BEGIN quando si dispone di una "tabella di funzione a valori in linea"

Vedi CREATE FUNCTION e l'esempio B

CREATE FUNCTION [dbo].[Sample] (@SampleValue int) 
RETURNS TABLE 
AS 
RETURN 
(
SELECT * FROM View_sls 
); 
GO 
3

è necessario descrivere la tabella restituita, popolarla, quindi RETURN:

CREATE FUNCTION [dbo].[Sample] (@SampleValue int) 
RETURNS @RESULTS TABLE 
(
    ID int, <other fields> 
) 
AS BEGIN 

    INSERT @T 
    <select ...> 

    RETURN 
END 
+0

I miei view_sls tavolo è davvero grande, in modo da non voler definire tutte le colonne uno per uno, c'è un'alternativa? – HOY

10

Due cose:

  • è necessario definire la struttura della tabella che si desidera tornare
  • è necessario aggiungere i dati in quella tabella

Poi è possibile chiamare RETURN; per restituire i dati di tale tabella al chiamante.

quindi è necessario qualcosa di simile:

CREATE FUNCTION [dbo].[Sample] (@SampleValue int) 
RETURNS @returnTable TABLE 
        (ContactID int PRIMARY KEY NOT NULL, 
         FirstName nvarchar(50) NULL, 
         LastName nvarchar(50) NULL, 
         JobTitle nvarchar(50) NULL, 
         ContactType nvarchar(50) NULL) 
AS 
BEGIN 
    INSERT INTO @returnTable 
     SELECT ContactID, FirstName, LastName, JobTitle, ContactType 
     FROM dbo.View_sls 

    RETURN; 
END 
+0

La mia tabella view_sls è davvero grande, quindi non voglio definire tutte le colonne una per una, c'è un'alternativa? – HOY

+0

Suppongo che OP voglia un TVF in linea, non uno multi-statement – gbn

Problemi correlati