关于自定义函数的调用问题,简单

zoujinhe 2004-07-04 07:44:00
代码为

CREATE FUNCTION QTStrToInt (@QTStr nvarchar(200))
RETURNS INT AS
BEGIN
DECLARE @RESULT INT
DECLARE @POS INT
SET @RESULT = 0
IF LEN(@QTSTR) > 0 AND RIGHT(@QTStr, 1) <> ','
SET @QTStr = @QTStr + ','
WHILE LEN(@QTStr) > 0
BEGIN
SET @POS = CHARINDEX(@QTStr, ',', 1)
SET @RESULT = @RESULT + CAST(LEFT(@QTStr, @POS - 1) as INT)
SET @QTStr = STUFF(@QTStr, 1, @POS, '')
END
RETURN @RESULT
END

我用 SELECT QTStrToINT('33,43,32,32'),错误为:

服务器: 消息 195,级别 15,状态 10,行 1
'QTStrToINT' is not a recognized function name.



我用 QTStrToINT('33,43,32,32'),错误为:

服务器: 消息 170,级别 15,状态 1,行 1
Line 1: Incorrect syntax near '33,43,32,32'.
...全文
153 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
zjcxc 元老 2004-07-04
  • 打赏
  • 举报
回复
不能,这是SQL的语法定.

返回值的函数是一定要加所有者,而返回结果集的函数可以省略
zoujinhe 2004-07-04
  • 打赏
  • 举报
回复
zjcxc(邹建)
这种函数调用不能去掉dbo,能不能讲讲其它方法?

是不是象pisces007(蝶鱼) 所讲:
如果是返回结果集,可以不用所有者,如果返回的值,就一定要加
pisces007 2004-07-04
  • 打赏
  • 举报
回复
如果是返回结果集,可以不用所有者,如果返回的值,就一定要加
zjcxc 元老 2004-07-04
  • 打赏
  • 举报
回复
这种函数调用不能去掉dbo
pisces007 2004-07-04
  • 打赏
  • 举报
回复
在这里不能去掉
zoujinhe 2004-07-04
  • 打赏
  • 举报
回复
谢谢,搞定了.

请问能不能把dbo去掉?
pisces007 2004-07-04
  • 打赏
  • 举报
回复
CHARINDEX
傳回字元字串中指定運算式的起始位置。

語法
CHARINDEX ( expression1 , expression2 [ , start_location ] )

引數
expression1

是包含要尋找的字元序列的運算式。expression1 是短字元資料型別類別的運算式。

expression2

是個運算式,通常是搜尋指定序列的資料行。expression2 是字元字串資料型別類別的運算式。

start_location

Is the character position to start searching for expression1 in expression2.若 start_location 未提供、為負數或零,則會由 expression2 的開頭開始搜尋。

pisces007 2004-07-04
  • 打赏
  • 举报
回复
--function写错了,应该是:
CREATE FUNCTION QTStrToInt (@QTStr nvarchar(200))
RETURNS INT AS
BEGIN
DECLARE @RESULT INT
DECLARE @POS INT
SET @RESULT = 0
IF LEN(@QTSTR) > 0 AND RIGHT(@QTStr, 1) <> ','
SET @QTStr = @QTStr + ','
WHILE LEN(@QTStr) > 0
BEGIN
SET @POS = CHARINDEX( ',',@QTStr)--------改成这样的
SET @RESULT = @RESULT + CAST(LEFT(@QTStr, @POS - 1) as INT)
SET @QTStr = STUFF(@QTStr, 1, @POS, '')
END
RETURN @RESULT
END
zoujinhe 2004-07-04
  • 打赏
  • 举报
回复
不会非要我传200个字符进去吧?

我是不定长的啊,最多200个字符.
zoujinhe 2004-07-04
  • 打赏
  • 举报
回复
服务器: 消息 536,级别 16,状态 3,过程 QTStrToInt,行 12
Invalid length parameter passed to the substring function.
zjcxc 元老 2004-07-04
  • 打赏
  • 举报
回复
SELECT dbo.QTStrToINT('33,43,32,32')
------^^^^加上所有者
zheninchangjiang 2004-07-04
  • 打赏
  • 举报
回复
用户定义函数,在调用时要加用户名
DebugXP 2004-07-04
  • 打赏
  • 举报
回复
SELECT DBO.QTStrToINT('33,43,32,32')

34,590

社区成员

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

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