50分求sql自定义函数问题,大家帮帮忙

mythmgn 2006-08-23 08:00:39
create function GetClassName(@ip nvarchar(50))
returns float as
begin
DECLARE @str1 nvarchar(50)
DECLARE @str2 nvarchar(50)
DECLARE @str3 nvarchar(50)
DECLARE @str4 nvarchar(50)
DECLARE @number float
DECLARE @weizhi int
set @weizhi=patindex('%.%',@ip)-1
set @str1=left(@ip,@weizhi)
set @ip=stuff(@ip,1,patindex('%.%',@ip),'')
set @weizhi=patindex('%.%',@ip)-1
set @str2=left(@ip,@weizhi)
set @ip=stuff(@ip,1,patindex('%.%',@ip),'')
set @weizhi=patindex('%.%',@ip)-1
set @str3=left(@ip,@weizhi)
set @ip=stuff(@ip,1,patindex('%.%',@ip),'')
set @str4=@ip
set @number=256*256*256*cast(@str1 as float)+256*256*cast(@str2 as float)+256* cast(@str3 as float)+ cast(@str4 as float)-1
return number
end
select GetClassName('201.210.210.1')


我这样写有什么错误? 我想用函数GetClassName对201.210.210.1做上述处理 还有我函数写的对么 大家给看看 我在查询分析器里执行显示


服务器: 消息 156,级别 15,状态 1,过程 GetClassName,行 23
在关键字 'select' 附近有语法错误。
服务器: 消息 195,级别 15,状态 1,过程 GetClassName,行 23
'GetClassName' 不是可以识别的 函数名。



大家帮帮忙 谢谢了
...全文
192 点赞 收藏 13
写回复
13 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
mythmgn 2006-08-25
谢谢大家了 是go的问题 没有生成 函数吧 可能
回复
ooOO林丹OOoo 2006-08-24
运行已通过
回复
ooOO林丹OOoo 2006-08-24
改为这样就好了:
create function GetClassName(@ip nvarchar(50))
returns float as
begin
DECLARE @str1 nvarchar(50)
DECLARE @str2 nvarchar(50)
DECLARE @str3 nvarchar(50)
DECLARE @str4 nvarchar(50)
DECLARE @number float
DECLARE @weizhi int
set @weizhi=patindex('%.%',@ip)-1
set @str1=left(@ip,@weizhi)
set @ip=stuff(@ip,1,patindex('%.%',@ip),'')
set @weizhi=patindex('%.%',@ip)-1
set @str2=left(@ip,@weizhi)
set @ip=stuff(@ip,1,patindex('%.%',@ip),'')
set @weizhi=patindex('%.%',@ip)-1
set @str3=left(@ip,@weizhi)
set @ip=stuff(@ip,1,patindex('%.%',@ip),'')
set @str4=@ip
set @number=256*256*256*cast(@str1 as float)+256*256*cast(@str2 as float)+256* cast(@str3 as float)+ cast(@str4 as float)-1
return @number
end
go

declare @number1 nvarchar(100)
set @number1=dbo.GetClassName('201.210.210.1')
select @number1
go
回复
criedshy 2006-08-24
GetClassName 前你要加用户名的比如dbo

我这里测试是通过的


-----------------------------------------------------
3386036736.0

(所影响的行数为 1 行)
回复
hwb_net 2006-08-24
什么不行哦,我测了好多个IP哦
回复
KidAn 2006-08-23
在下面几句
declare @number1 nvarchar(100)
set @number1=dbo.GetClassName('201.210.210.1')
select @number1
前面加上GO

也就是改成
GO
declare @number1 nvarchar(100)
set @number1=dbo.GetClassName('201.210.210.1')
select @number1
回复
mythmgn 2006-08-23
也不行 打错字了
回复
mythmgn 2006-08-23
我这样写也行
create function GetClassName(@ip nvarchar(50))
returns float as
begin
DECLARE @str1 nvarchar(50)
DECLARE @str2 nvarchar(50)
DECLARE @str3 nvarchar(50)
DECLARE @str4 nvarchar(50)
DECLARE @number float
DECLARE @weizhi int
set @weizhi=patindex('%.%',@ip)-1
set @str1=left(@ip,@weizhi)
set @ip=stuff(@ip,1,patindex('%.%',@ip),'')
set @weizhi=patindex('%.%',@ip)-1
set @str2=left(@ip,@weizhi)
set @ip=stuff(@ip,1,patindex('%.%',@ip),'')
set @weizhi=patindex('%.%',@ip)-1
set @str3=left(@ip,@weizhi)
set @ip=stuff(@ip,1,patindex('%.%',@ip),'')
set @str4=@ip
set @number=256*256*256*cast(@str1 as float)+256*256*cast(@str2 as float)+256* cast(@str3 as float)+ cast(@str4 as float)-1
return @number
end
declare @number1 nvarchar(100)
set @number1=dbo.GetClassName('201.210.210.1')
select @number1

服务器: 消息 156,级别 15,状态 1,过程 GetClassName,行 23
在关键字 'declare' 附近有语法错误。

回复
mythmgn 2006-08-23
不行啊 自己的用户也不行
回复
hwb_net 2006-08-23
我快升级。。谢谢,一定搞定。。如果不是BDO换你用的用户
回复
hwb_net 2006-08-23
给我满分哦。

select 这儿加个dbo.GetClassName('201.210.210.1')
回复
mythmgn 2006-08-23
return @number 这少了个@ 忘了加 了 大家帮看看 其他什么地方错误 谢谢了
回复
相关推荐
发帖
.NET技术社区
创建于2007-09-28

5.8w+

社区成员

.NET技术交流专区
申请成为版主
帖子事件
创建了帖子
2006-08-23 08:00
社区公告
暂无公告