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' 不是可以识别的 函数名。



大家帮帮忙 谢谢了
...全文
211 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
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 这少了个@ 忘了加 了 大家帮看看 其他什么地方错误 谢谢了

62,243

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧