2009-08-11 4 views
0
CREATE FUNCTION GetPayCodeList 
(  
    -- Add the parameters for the function here 
     @PC varchar(50) 
) 

RETURNS TABLE 
AS 
RETURN 
( IF @PC = '*' 
     SELECT DISTINCT ID, Code, Description 
          FROM tbl 
     ELSE 
      SELECT DISTINCT ID, Code, Description 
          FROM tbl 
      WHERE Code = @PC 
) 

Répondre

2

Est-ce que certaines de ces colonnes sont caractérisées et DISTINCT?

Comme une note de côté, vous pouvez réécrire comme cela pour le rendre plus simple:

SELECT DISTINCT ID, Code, Description 
    FROM tbl 
    WHERE @PC = '*' OR Code = @PC 
+0

Sauf, passez @pc comme nulle quand vous voulez toutes les lignes, et utiliser ce prédicat: « Où (@PC isnull ou code = @PC) » – tpdi

0

Essayez ceci:

CREATE FUNCTION GetPayCodeList(   -- Add the parameters for the function here  
@PC varchar(50)) 
RETURNS @tbl TABLE (
    ID int 
    , Code varchar(50) 
    , Description varchar(max)) 
WITH SCHEMABINDING 
AS 
BEGIN 
IF @PC = '*'  
    SELECT DISTINCT ID, Code, Description        
    FROM tbl  
ELSE    
    SELECT DISTINCT ID, Code, Description        
    FROM tbl   
    WHERE Code = @PC 
END 
+0

Attention, ce qui en limite liées au schéma de votre capacité à changer les tables sous-jacentes après la création de la fonction. –

+0

@Adam: d'autre part * pas * le marquer schemaboudn le fera effectuer lamentablement: http://blogs.msdn.com/sqlprogrammability/archive/2006/05/12/596424.aspx –

1

Vous devrez écrire une fonction multi-étapes, vous ne pouvez pas faites-le une fonction en ligne .

CREATE FUNCTION GetPayCodeList 
(  
    -- Add the parameters for the function here 
     @PC varchar(50) 
) 

RETURNS @table TABLE (ID int NOT NULL, 
... //others fields) AS 
BEGIN 
IF @PC = '*' 
INSERT @table (SELECT DISTINCT ID, Code, Description 
         FROM tbl) FROM tbl 
ELSE 
INSERT @table (SELECT DISTINCT ID, Code, Description 
         FROM tbl 
     WHERE Code = @PC) FROM tbl 
RETURN @table 
END 
Questions connexes