Create function EcodeIP(@strIP as varchar(2000))
returns bigint
as
Begin
if @strIP='' or @strIP='127.0.0.1'
begin
   set @strIP='192.168.0.1'
end
return(
cast(PARSENAME(@strIP,4) as bigint) * 16777216 +cast(PARSENAME(@strIP,3) as bigint)* 65536+
cast(PARSENAME(@strIP,2) as bigint) * 256+cast(PARSENAME(@strIP,1) as bigint)-1
)
EndCreate function DcodeIP(@strIP as bigint)
returns varchar(2000)
as
Begin
declare @sect1 bigint,@sect2 bigint,@sect3 bigint,@sect4 bigint,@tempstrIP bigint
set @sect1=cast(@strIP/16777216 as bigint)
set @tempstrIP=@strIP-@sect1*16777216
set @sect2=cast(@tempstrIP/65536 as bigint)
set @tempstrIP=@tempstrIP-@sect2*65536
set @sect3=cast(@tempstrIP/256 as bigint)
set @tempstrIP=@tempstrIP-@sect3*256
set @sect4=@tempstrIP+1
return cast(@sect1 as varchar)+'.'+cast(@sect2 as varchar)+'.'+cast(@sect3 as varchar)+'.'+cast(@sect4 as varchar)
End--测试:
select dbo.EcodeIP('211.23.44.1')
/*
-------------------- 
3541511168(所影响的行数为 1 行)
*/
select dbo.DcodeIP(3541511168)
/*
211.23.44.1(所影响的行数为 1 行)*/

解决方案 »

  1.   

    所有这样的自定义函数都要加上
    dbo
    才能运行吗?
      

  2.   

    ----------
    dbo 是具有在数据库中执行所有活动的暗示性权限的用户。
    固定服务器角色 sysadmin 的任何成员创建的任何对象都自动属于 dbo。
      

  3.   

    如果你的函数是返回值的, 则调用时必须加所有者, 也就是楼主说的dbo如果你的函数是返回表的, 则调用时直接用函数名即可.