none
一个函数,根据中文名称,返回对应id号的问题 RRS feed

  • 常规讨论

  • 现在创建一个函数,代码表:code,2个字段,codeid,codename,

    1,'北京'

    2,'南京'

    如果传入了一个没有的,就返回指定的值,我的做法

    create function getid(@name varchar(100))

    returns int

    as

    declare @outid int

    set @outid=0

    select @outid=codeid from code where codename like '%"+@name+"%'

    if @outid=0

    begin

    set @outid=99

    end

    return @outid

    --**********************************--

    曾经我的想法是这样,但不能实现

    select isnull(@outid,99) from code where codename like '%"+@name+"%'

    或者是这样:

    select @outid=case when len(codeid)=0 or codeid is null then 99 else codeid end  from code where codename like '%"+@name+"%'

    如果@name在表中不存在,就无法指定到值99,所以就有了最上面的写法,因此来交流下,你们是怎么个写法。

    2012年4月27日 3:02

全部回复

  • 或许你可以试试看把Like后面的判断改成单引号,我以Northwind来示范,不晓得是不是你要的样子,希望对你有帮助。

    use Northwind
    go
    if exists (select * from sys.objects where type ='FN' and name='getid')
    	drop function getid
    go
    
    create function getid(@name varchar(100))
    returns int
    as
    begin
    	declare @outid int = 0
    	select @outid=RegionID from Region where RegionDescription like '%' +@name+'%'
    	
    	if @outid=0
    	begin
    		set @outid=99
    	end
    	return @outid
    end
    
    go
    
    select dbo.getid('Northern')
    
    select dbo.getid('test')
    


    以上說明若有錯誤請指教,謝謝。
    http://www.dotblogs.com.tw/terrychuang/

    2012年4月27日 3:19
  • 不好意思,引号是手误,刚才编辑时,貌似是这个文本编辑器的问题,自动加了双引号,这些都是小节,这个函数功能我已经实现了。

    我来交流的目的是,以下两条语句无法赋值,不知道,我的表达可算清楚明白:

    select @outid= isnull(codeid,99) from code where codename like '%'+@name+'%'

    或者是这样:

    select @outid=case when len(codeid)=0 or codeid is null then 99 else codeid end  from code where codename like '%'+@name+'%'

    2012年4月27日 4:01
  • like '%'+@name+'%'

    如果有多条记录满足时,楼主要的效果是?


    ROY WU(吳熹)


    2012年4月27日 4:33
    版主
  • 因为不符合where条件所产生的结果集是空的,所以没办法在select用isnull或case when做转换,或许你可以试试看用下列方式来做。

    declare @name varchar(100) = 'aa'
    
    declare @outid int 
    if exists (select RegionID from Region where RegionDescription like '%' +@name+'%')
    	set @outid = (select RegionID from Region where RegionDescription like '%' +@name+'%')
    else
    	set @outid = 99
    		
    		
    select @outid
    


    以上說明若有錯誤請指教,謝謝。
    http://www.dotblogs.com.tw/terrychuang/


    2012年4月27日 5:56
  • 谢谢给予积极的答复,要追求的效果就是:以最少的代码实现更多的功能。
    2012年4月28日 2:18