可以使用INSERT、UPDATE、DELETE 语句,但是这些语句只能修改函数的局部table变量。附:函数中的有效语句类型包括: DECLARE 语句,该语句可用于定义函数局部的数据变量和游标。
为函数局部对象赋值,如使用 SET 给标量和表局部变量赋值。
游标操作,该操作引用在函数中声明、打开、关闭和释放的局部游标。不允许使用 FETCH 语句将数据返回到客户端。仅允许使用 FETCH 语句通过 INTO 子句给局部变量赋值。
控制流语句。
SELECT 语句,该语句包含带有表达式的选择列表,其中的表达式将值赋予函数的局部变量。
INSERT、UPDATE 和 DELETE 语句,这些语句修改函数的局部 table 变量。
EXECUTE 语句,该语句调用扩展存储过程。 

解决方案 »

  1.   

    还是不太明白,怎么样的属于局部 table 变量?
    比如我创建的函数是这样的
    test表也是dbo的
    有什么错误吗?
    CREATE FUNCTION dbo.AddUserSpeed()
     RETURNS int
    BEGIN
     declare @MaxUserid int 
     BEGIN TRAN
       
       UPDATE test SET tname='test1' where tid=1   IF @@ERROR<>0 
        BEGIN
         SET @MaxUserid=0
         ROLLBACK TRAN
        END
       ELSE
        BEGIN
         COMMIT TRAN 
        END  RETURN @MaxUserid 
    END