表结构:
TagId TagName TagCount语句需求:
插入一条记录前判断,如果TagName已经存在同名的,则TagCount+1,否则插入新记录

解决方案 »

  1.   

    declare @tagname as varchar(10)
    set @tagname = 'tagname'if exists (select 1 from tb where tagname = @tagname)
       update tb set tagcount = tagcount + 1
    else
       insert into ...
      

  2.   

    用存儲過程判斷if not exists (select 1 from tab1 where tagName=@tabName)
    insert tab1(tagName,tagCount) values(@tabName,1)
    else 
    update tab1 set tagCount=tagCount+1 where tagName=@tabName
      

  3.   


    TagCount+1 :是参数TagCount要变化,还是数据库里最大TagCount 要变化 ?
     
    是参数TagCount要变化
    INSERT INTO TABLE(TagId,TagName,TagCount)
    SELECT @TagId,@TagName,TagCount = CASE WHEN EXISTS(SELECT TagName FROM TABLE WHERE TagName=@TagName) THEN  
                                      @TagCount+1
                           ELSE    @TagCount
    还是数据库里最大TagCount 
    INSERT INTO TABLE(TagId,TagName,TagCount)
    SELECT @TagId,@TagName,TagCount = CASE WHEN EXISTS(SELECT TagName FROM TABLE WHERE TagName=@TagName) THEN  
                                      (SELECT MAX(TagCount+1)+1 FROM TABLE)
                           ELSE    @TagCount
      

  4.   

    在SQL08環境可用一個語句完成http://topic.csdn.net/u/20080514/15/af788986-0ef6-4d83-8e9d-4cb97e2831c8.html
      

  5.   

    这个用存储过程很好实现
    create sp_name(@tagid int,@tagname varchar(100))
    as 
    begin declare @count int
     select @count=isnull(count(1),0) from tblname where tagname=@tagname
     if @count=0
     insert into tblname(tagid,tagname,tagcount)values(@tagid,0)
     else
     update tblname set tagcount=tagcount+1 where tagname=@tagname
    end
      

  6.   

    /*表结构: 
    TagId TagName TagCount 语句需求: 
    插入一条记录前判断,如果TagName已经存在同名的,则TagCount+1,否则插入新记录
    */
    use tempdb
    go
    create table p(tagid int,tagname char(20),tagcount int )
    go
    insert into p values(1,'aaa',1)
    insert into p values(2,'bbb',1)
    insert into p values(3,'ccc',1)
    go--用触发器实现
    create trigger delete1 on p
    instead of insert
    as
    if exists(select * from p where tagname=(select tagname from inserted))
    update p
    set tagcount=tagcount+1
    where tagname=(select tagname from inserted)
    else
    insert into p 
    select * from inserted
    return 
    go

    select * from p
    insert into p values(4,'ddd',1)
    select * from p
    insert into p values(4,'ddd',1)
    select * from p