2009-08-11 12 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 
) 

答えて

2

これらの文字列とDISTINCTはありますか?注意点として、あなたはそれを簡単にするために、このようにそれを書き換えることができ

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

、この述語を使用する:「WHERE(@PC ISNULL ORコード= @PC)」 – tpdi

0

はこれを試してください:あなたは、多段階の機能を記述する必要があります

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

警告、変更するには、このスキーマバインド限界を作ることはあなたの能力関数の後にある基礎となる表が作成されています。 –

+0

@Adam:他方では、*それをマーキングすることは、それを迷惑にするでしょう:http://blogs.msdn.com/sqlprogrammability/archive/2006/05/12/596424.aspx –

1

、することはできませんそれは インライン関数を行います。あなたはすべての行をしたいときはnullとして@pc渡し、除き

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 
関連する問題