ALTER          FUNCTION tmp2 ()
RETURNS TABLE    
AS
--begin
    RETURN (SELECT * FROM gzda)
--end以上是一个最简单的函数,返回一个表变量,可是如果加上begin 和end就会报错。去了这两句就一切正常。这是为什么,难道如果返回的是表变量,就不能加上begin 和 end吗?真是不解。

解决方案 »

  1.   

    SQL Server 2000 支持三种用户定义函数: 标量函数
    内嵌表值函数  --你用的是这种,不能带begin end
    多语句表值函数 表值函数返回 table。
    对于内嵌表值函数,没有函数主体;表是单个 SELECT 语句的结果集。
    对于多语句表值函数,在 BEGIN...END 块中定义的函数主体包含 TRANSACT-SQL 语句,这些语句可生成行并将行插入将返回的表中。
      

  2.   

    以下这样写,就可以用begin end了。内嵌表值函数是不充许使用的。ALTER    FUNCTION 示例()
    RETURNS @regzda TABLE (结果1 nchar(6),结果2 nchar(6),结果3 nchar(6))
    AS
    BEGIN    insert into @regzda
        select 'abc','ggg','fff'
       RETURN
    END