服务器: 消息 536,级别 16,状态 3,过程 QTStrToInt,行 12 Invalid length parameter passed to the substring function.
--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
CHARINDEX 傳回字元字串中指定運算式的起始位置。 語法 CHARINDEX ( expression1 , expression2 [ , start_location ] ) 引數 expression1是包含要尋找的字元序列的運算式。expression1 是短字元資料型別類別的運算式。expression2是個運算式,通常是搜尋指定序列的資料行。expression2 是字元字串資料型別類別的運算式。start_locationIs the character position to start searching for expression1 in expression2.若 start_location 未提供、為負數或零,則會由 expression2 的開頭開始搜尋。
------^^^^加上所有者
Invalid length parameter passed to the substring 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
傳回字元字串中指定運算式的起始位置。 語法
CHARINDEX ( expression1 , expression2 [ , start_location ] ) 引數
expression1是包含要尋找的字元序列的運算式。expression1 是短字元資料型別類別的運算式。expression2是個運算式,通常是搜尋指定序列的資料行。expression2 是字元字串資料型別類別的運算式。start_locationIs the character position to start searching for expression1 in expression2.若 start_location 未提供、為負數或零,則會由 expression2 的開頭開始搜尋。
这种函数调用不能去掉dbo,能不能讲讲其它方法?是不是象pisces007(蝶鱼) 所讲:
如果是返回结果集,可以不用所有者,如果返回的值,就一定要加