下面的代码有什么问题

时间:2009-08-11 21:04:57

标签: sql-server-2005

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
)

3 个答案:

答案 0 :(得分:2)

这些列中是否有任何字符和DISTINCT?

作为旁注,您可以将其重写为更简单:

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

答案 1 :(得分:1)

你必须写一个多步功能,你不能这样做 内联函数。

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

答案 2 :(得分: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