有人可以解释为什么我们需要在下面的代码中声明变量@work吗?
CREATE FUNCTION dbo.GetURL (@URL VARCHAR(250))
RETURNS VARCHAR(250)
AS BEGIN
DECLARE @Work VARCHAR(250)
SET @Work = @URL
SET @Work = SUBSTRING(@work, CHARINDEX('.', @work) + 1, LEN(@work))
SET @Work = SUBSTRING(@work, 0, CHARINDEX('.', @work))
RETURN @work
END
我们可以像下面那样重新构建代码吗?如果没有,请以更外行的方式解释。
CREATE FUNCTION dbo.GetURL (@URL VARCHAR(250))
RETURNS VARCHAR(250)
AS BEGIN
SET @URL = SUBSTRING(@URL, CHARINDEX('.', @URL) + 1, LEN(@URL))
SET @URL = SUBSTRING(@URL, 0, CHARINDEX('.', @URL))
RETURN @URL
END
答案 0 :(得分:1)
您的功能只是简单地获取您的网址的第二个(。),如
thisis.my.url
return
my
根据您的问题
我们可以像下面那样重新构建代码吗?
我的回答是Yes
答案 1 :(得分:1)
两个代码段在功能上都是等效的。唯一的区别是第一个代码段正在创建原始值@URL
的副本,然后修改复制变量@Work
,而不是修改原始参数本身。这样,您可以将函数的原始值用于函数,直到最后需要以后进行比较或任何其他工作。
只要您不打算在函数中再次使用参数的原始值,就没有必要创建它的副本。
我相信你的重构努力是正确的方向。您应该使用第二个代码段作为函数的新定义。
答案 2 :(得分:-1)
你用大写字母W声明了一个变量@Work。但在这部分
SET @Work = SUBSTRING(@work, CHARINDEX('.', @work) + 1, LEN(@work))
你使用@work变量和小写w。只需将其更改为大写字母W即可。