自定義函數中不能執行update, insert, delete

解决方案 »

  1.   

    marco08(天道酬勤) ( ) 信誉:100    Blog  2007-2-12 9:27:25  得分: 0  
     
     
       
    自定義函數中不能執行update, insert, delete  
     
      

  2.   

    create function test(@a int='')
    returns @ta table(工号 varchar(3),   打卡日期 varchar(10),  打卡时间 varchar(8))
    as
    begin
    insert @ta
    select '001',      '2006.09.08',     '07:40:09' union all 
    select '001',      '2006.09.08',     '08:09:00' union all 
    select '002',      '2006.09.08',     '08:09:00' union all 
    select '001',      '2006.09.09',     '08:09:09'
    return
    end
    --这样用
    select * from test('')
      

  3.   

    roy_88(中国风_燃烧你的激情!!!)
    这样没办法将数据插入/更新到数据表中啊
      

  4.   

    所先有一个表
    CREATE TABLE tSystem_OnlyNumber(MDI int IDENTITY (1, 1) NOT NULL ,MOnlyName varchar (36) COLLATE Chinese_PRC_CI_AS NOT NULL ,MOnlyNumber varchar (20) COLLATE Chinese_PRC_CI_AS NOT NULL) ON [PRIMARY]那么现在创建一个函数
    CREATE   function  f_ShowOnlyNumber(@OnlyName varchar(36) )     
      RETURNS   varchar(10)   
      AS   
      begin   
     declare @str  nvarchar(500)
    declare @Row int --返回当前影响到的行数
     set   @str=''
    select @str=MOnlyName from tSystem_OnlyNumber where MOnlyName = @OnlyName
    set @Row=@@rowcount
    if(@Row=1)
    begin
    set @str = convert(int,@str)+1
                     --如果相应的数据存在,就对该数据进行更新
                      update tSystem_OnlyNumber set MOnlyNumber= ''+@str+'' where MOnlyName= ''+@OnlyName+'' where 
    end
    else
    begin
    set  @str='1001'
    --如果相应的数据汪存在,就将该数据新增表数据表中
             insert tSystem_OnlyNumber(MOnlyName,MOnlyNumber) values(''+@MOnlyName+'',''+@str+'')

    end
     RETURN  (@str)   
      end
      

  5.   

    --那么现在创建一个存储过程
    CREATE   PROC  f_ShowOnlyNumber
    (
    @OnlyName varchar(36),
    @str  varchar(500)='' output  --返回@STR ,也可以通过下面的RETURN获取
    )   
    AS   declare @Row int --返回当前影响到的行数
    set   @str=''
    select @str=MOnlyName from tSystem_OnlyNumber where MOnlyName = @OnlyName
    set @Row=@@rowcount
    if(@Row=1)
    begin
    set @str = convert(int,@str)+1
                     --如果相应的数据存在,就对该数据进行更新
                      update tSystem_OnlyNumber set MOnlyNumber= @str where MOnlyName= @OnlyName
    end
    else
    begin
    set  @str='1001'
    --如果相应的数据汪存在,就将该数据新增表数据表中
    insert tSystem_OnlyNumber(MOnlyName,MOnlyNumber) values(@OnlyName,@str)
    end
     RETURN  @str  --返回@STR ,也可以通过OUTPUT获取
     
    GO
      

  6.   

    --利用存储过程返回也可以
    大概如下
    CREATE PROCEDURE pSys_GetOnlyNumber 
    @MOnlyName varchar(36), --唯一值的名称
    @MOnlyNumber varchar(20) output--添加时默认值
    AS
     declare @str  nvarchar(500)
    declare @Row int --返回当前影响到的行数
     set   @str=''
    select @str=MOnlyNumber from tSystem_OnlyNumber where MOnlyName = @MOnlyName
    set @Row=@@rowcount
    if(@Row>0)--如果数据存在,就获取加1
    begin
    set @str = convert(int,@str)+1
    update tSystem_OnlyNumber set MOnlyNumber= @str where MOnlyName = @MOnlyName
    end
    else--否则就直接创建 
    begin
    set  @str='1001'
    insert tSystem_OnlyNumber(MOnlyName,MOnlyNumber) values(@MOnlyName,@str)
    end
    set @MOnlyNumber=@str
    select @str as OnlyNumber
    GO
      

  7.   

    okson(okson) ( ) 信誉:100    Blog  2007-2-13 17:05:41  得分: 0  
     
     
       
    有没有帮知道如何解决的啊
    就是利用函数更新数表及添加数据  
     
    这是不可能的