none
触发器问题 RRS feed

  • 问题

  • 这个表大概有这几个字段 id  roadName  roadCode。。。(均不为空)其中id是自增长的,roadCode是主键(nvarchar),我能获得的假如就只有roadName,我该怎么插入一条数据?并且让roadCode是有规律的(就是类似DL0001  DL0002这样)
    2012年12月19日 6:38

答案

  • declare @t table([id] int,[roadName] varchar(1),[roadCode] NVARCHAR(10))
    insert @t
    select 1,'a',null union all
    select 2,'b',null union all
    select 3,'c',null
    
    update @t set [roadCode]='DL'+right('0000'+ltrim(id),4)
    select * from @t
    /*
    id          roadName roadCode
    ----------- -------- ----------
    1           a        DL0001
    2           b        DL0002
    3           c        DL0003
    */
    

    2012年12月19日 9:51
    版主

全部回复

  • 你是想insert语句中不包含roadCode字段,而是通过触发器来更新此字段?还是说插入语句中包含此字段,但是通过触发器来更新roadCode字段使其符合某一规则?


    Microsoft

    2012年12月19日 6:56
  • 不包含roadcode,并且满足id 和 roadCode一一对应  比如:  1对应DL0001   100对应 DL0100
    2012年12月19日 8:09
  • declare @t table([id] int,[roadName] varchar(1),[roadCode] NVARCHAR(10))
    insert @t
    select 1,'a',null union all
    select 2,'b',null union all
    select 3,'c',null
    
    update @t set [roadCode]='DL'+right('0000'+ltrim(id),4)
    select * from @t
    /*
    id          roadName roadCode
    ----------- -------- ----------
    1           a        DL0001
    2           b        DL0002
    3           c        DL0003
    */
    

    2012年12月19日 9:51
    版主
  • 如果是用TRIGGER的話,可以參考下列的做法:

    use tempdb
    go
    
    if object_id('t') is not null
    	drop table t
    go
    
    create table t([id] int,[roadName] char(1),[roadCode] nvarchar(10))
    go
    
    --建立trigger
    create trigger tr_insert_t
    on t
    for insert
    as
    	update t
    	set roadCode = 'DL' + right(replicate('0',5) + convert(varchar(5),id),5)
    	where id = (select id from inserted)
    
    go
    
    insert t(id,[roadName]) values (1,'a')
    insert t(id,[roadName]) values (2,'b')
    insert t(id,[roadName]) values (3,'c')
    go
    
    
    select *
    from t
    
    


    以上說明若有錯誤請指教,謝謝。

    | 台灣 SQL PASS 社群 | SQL PASS Taiwan

    | 歡迎參觀我的BLOG - 積沙成塔

    2012年12月20日 6:04