2

我的功能如下::


Create Function dbo.fnFcid(@url varchar)
 Returns int

 As

 BEGIN
 Return ( select ID from  TTI_fat.dbo.FormContext
          where caseId = (SELECT SUBSTRING(@url, PATINDEX('%&c=%', @url)+ 3, (PATINDEX('%&y=%', @url) - (PATINDEX('%&c=%', @url)+3)))) 
          and   YearID = (SELECT SUBSTRING(@url, PATINDEX('%&y=%', @url)+ 3, (PATINDEX('%&e=%', @url) - (PATINDEX('%&y=%', @url)+3)))) 
          and   EntityID = (SELECT SUBSTRING(@url, PATINDEX('%&e=%', @url)+ 3, (PATINDEX('%&g=%', @url) - (PATINDEX('%&e=%', @url)+3))))
          and   GroupID = (SELECT SUBSTRING(@url, PATINDEX('%&g=%', @url)+ 3, (PATINDEX('%&v=%', @url) - (PATINDEX('%&g=%', @url)+3)))) 
         )  
   END;
 Go

当我将以下值传递给函数时


select dbo.fnFcid('http://localh0st/web/forms/getForm.asp?page=FKYASDENPLFPg1V2014&c=9&y=283&e=1022&g=2&v=1&x=296807&j=161037&z=1')

它向我显示以下错误


Msg 537, Level 16, State 2, Line 1
Invalid length parameter passed to the LEFT or SUBSTRING function.
4

3 回答 3

1

解决了我的上述问题的问题它是由于我在声明函数时忘记提及 varchar 大小

Create Function dbo.fnFcid(@url varchar(max))
于 2013-09-24T05:15:50.037 回答
0

您是否错过了 varchar 中的长度,如果您不提及长度,它将为 1。

Create Function dbo.fnFcid(@url varchar(255))
 Returns int

 As

 BEGIN
 Return ( select ID from  TTI_fat.dbo.FormContext
          where caseId = (SELECT SUBSTRING(@url, PATINDEX('%&c=%', @url)+ 3, (PATINDEX('%&y=%', @url) - (PATINDEX('%&c=%', @url)+3)))) 
          and   YearID = (SELECT SUBSTRING(@url, PATINDEX('%&y=%', @url)+ 3, (PATINDEX('%&e=%', @url) - (PATINDEX('%&y=%', @url)+3)))) 
          and   EntityID = (SELECT SUBSTRING(@url, PATINDEX('%&e=%', @url)+ 3, (PATINDEX('%&g=%', @url) - (PATINDEX('%&e=%', @url)+3))))
          and   GroupID = (SELECT SUBSTRING(@url, PATINDEX('%&g=%', @url)+ 3, (PATINDEX('%&v=%', @url) - (PATINDEX('%&g=%', @url)+3)))) 
         )  
   END;
 Go
于 2013-09-24T05:23:35.333 回答
0

您的 Substring 表达式是错误背后的原因。

子字符串的语法是SUBSTRING(表达式,开始,长度)

您的代码长度部分是:

(PATINDEX('%&y=%', @url) - (PATINDEX('%&c=%', @url)+3))    

如果您的@url不包含&y=然后&c=长度将变为-3

因此,由于负长度 tsql 会产生错误。

处理负面部分,它将运行而不会出错。

于 2013-09-23T13:21:20.733 回答