日期:2014-05-19  浏览次数:20572 次

真怪,定义函数,返回一个表变量时,为何不能用begin end呢?请看代码:
ALTER                     FUNCTION   tmp2   ()
RETURNS   TABLE        
AS
--begin
        RETURN   (SELECT   *   FROM   gzda)
--end

以上是一个最简单的函数,返回一个表变量,可是如果加上begin   和end就会报错。去了这两句就一切正常。这是为什么,难道如果返回的是表变量,就不能加上begin   和   end吗?真是不解。

------解决方案--------------------
SQL Server 2000 支持三种用户定义函数:

标量函数


内嵌表值函数 --你用的是这种,不能带begin end


多语句表值函数


表值函数返回 table。
对于内嵌表值函数,没有函数主体;表是单个 SELECT 语句的结果集。
对于多语句表值函数,在 BEGIN...END 块中定义的函数主体包含 TRANSACT-SQL 语句,这些语句可生成行并将行插入将返回的表中。