SQL函数中的变量赋值

时间:2017-04-06 07:53:10

标签: sql sql-server

有人可以解释为什么我们需要在下面的代码中声明变量@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

3 个答案:

答案 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即可。