CREATE TABLE CODE_ID2 ( c_col_name nvarchar(50), n_id bigint )
go
CREATE FUNCTION [dbo].[getId]
(
@v_col_name  nvarchar(30)   --字段名
)
RETURNS 
bigint
AS
BEGIN
INSERT INTO sysmng.dbo.code_id2( c_col_name, n_id ) VALUES ( 'a', 1 )
RETURN 1
END报错信息:在函数内的 'INSERT' 中对带副作用的或依赖于时间的运算符的使用无效。把 那条 INSERT语句注释掉就可以, 但是单独执行那条INSERT 语句是可以的
微软真的很折腾人啊, 函数还分这么多种,而且没有 rowtype的定义赋值方式

解决方案 »

  1.   

    是不是,n_id 是自增长的啊?
      

  2.   

    函数不能insert delete delete 表数据
      

  3.   

    函数里不能带操纵型语句,楼主可以改用procedure
    有输入和输出参数CREATE TABLE CODE_ID2 ( c_col_name nvarchar(50), n_id bigint )
    go
    CREATE proc GetID
    (
    @v_col_name  nvarchar(30),   --字段名
             @Return_id bigint output
    )AS
    BEGIN
    INSERT INTO sysmng.dbo.code_id2( c_col_name, n_id ) VALUES ( 'a', 1 )
    select @Return_id = 1
    END--
      

  4.   

    我已经改了, 然后从函数调用存储过程的时候报这个错:    消息 557,级别 16,状态 2,第 1 行
        只有函数和扩展存储过程才能从函数内部执行。我估计这次真的是没有办法了, 其实我就是想把 ORACLE里面的SEQUENCE移植到SQL SERVER来
      

  5.   

    用xp_exec扩展SP可以实现的。
    但是好像比较烦`~~
      

  6.   

    函數不能更新,插入數據,不能執行動態SQL, 不能使用getdate()等不確定函數
      

  7.   

    应该把调用顺序调整一下:先调用procedure,在procedure里调用function,这样就通了。
      

  8.   

    函数不能insert delete delete 表数据