写SQL 函数的时候遇到问题,忘大家帮忙解决

wxc0077 2009-03-30 05:35:35
--函数
USE bbs_test
GO

IF EXISTS(SELECT name FROM bbs_test..sysobjects where name in('UsernameToNickname') and xtype = 'F')
DROP FUNCTION UsernameToNickname

GO

CREATE FUNCTION UsernameToNickname(@username nvarchar(50))
RETURNS nvarchar(50)

AS
BEGIN
DECLARE @Result nvarchar(50)
DECLARE @Index int
DECLARE @tmpstr nvarchar(50)
DECLARE @beginindex int
SET @beginindex = 0
IF EXISTS(SELECT CHARINDEX(',',@username,@beginindex))
BEGIN
WHILE(SELECT CHARINDEX(',',@username,@beginindex))<>NULL
BEGIN
SET @Index = CHARINDEX(',',@username)
SET @tmpstr = (SELECT max(nickname) FROM dnt_users where username in (SUBSTRING(@username,1,@Index-1)))
SET @beginindex = @Index
SET @Result =@Result + @tmpstr + ','
END
SET @Result = SUBSTRING(@Result,1,LEN(@Result))
END
ELSE
BEGIN
SET @Result = (SELECT max(nickname) FROM dnt_users where username in ('@username'))
END
RETURN(@Result)
END

GO

使用的时候出现问题
select bbs_test..UsernameToNickname('aabb,ccdd')


出现
服务器: 消息 102,级别 15,状态 1,行 1
在 '(' 附近有语法错误。

请知道为啥的人,指点一下我
...全文
114 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
wxc0077 2009-03-30
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 yangjiexi 的回复:]
SQL code
--调用错误,select bbs_test.dbo.UsernameToNickname('aabb,ccdd')
或者select dbo.UsernameToNickname('aabb,ccdd')
[/Quote]


果然如你说的,谢谢了
yangjiexi 2009-03-30
  • 打赏
  • 举报
回复

--调用错误,select bbs_test.dbo.UsernameToNickname('aabb,ccdd')
或者select dbo.UsernameToNickname('aabb,ccdd')
wxc0077 2009-03-30
  • 打赏
  • 举报
回复
好像还是不行,报的错和前面一样
htl258_Tony 2009-03-30
  • 打赏
  • 举报
回复
IF EXISTS(SELECT name FROM bbs_test..sysobjects where name in('UsernameToNickname') and xtype = 'F') 
DROP FUNCTION UsernameToNickname

GO

CREATE FUNCTION UsernameToNickname(@username nvarchar(50))
RETURNS nvarchar(50)

AS
BEGIN
DECLARE @Result nvarchar(50)
DECLARE @Index int
DECLARE @tmpstr nvarchar(50)
DECLARE @beginindex int
SET @beginindex = 0
IF EXISTS(SELECT CHARINDEX(',',@username,@beginindex))
BEGIN
WHILE(SELECT CHARINDEX(',',@username,@beginindex)) <>NULL
BEGIN
SET @Index = CHARINDEX(',',@username)
SET @tmpstr = (SELECT max(nickname) FROM dnt_users where charindex(username,(SUBSTRING(@username,1,@Index-1)))>0) --这里改动
SET @beginindex = @Index
SET @Result =@Result + @tmpstr + ','
END
SET @Result = SUBSTRING(@Result,1,LEN(@Result))
END
ELSE
BEGIN
SET @Result = (SELECT max(nickname) FROM dnt_users where charindex(username,@username)>0) --这里改动
END
RETURN(@Result)
END

GO
这样试一下

34,589

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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