在一个批处理中创建多个UDF - SQL Server

时间:2014-12-02 21:56:44

标签: sql sql-server sql-server-2008-r2

我问的是SQL Server 2008 R2的这个问题

我想知道是否有办法在单个批处理语句中创建多个函数。

我已经将以下代码作为示例;假设我想要一个字符串并按字母顺序重新排列它的字母。所以,'你好'会变成'eHllo'

CREATE FUNCTION char_split (@string varchar(max))
RETURNS @characters TABLE 
(
chars varchar(2)
)
AS
BEGIN

    DECLARE @length int,
            @K      int

    SET @length = len(@string)
    SET @K = 1

    WHILE @K < @length+1
        BEGIN
            INSERT INTO @characters
            SELECT SUBSTRING(@string,@K,1)
            SET @K = @K+1
        END

    RETURN
END


CREATE FUNCTION rearrange (@string varchar(max))
RETURNS varchar(max)
AS
BEGIN

    DECLARE @SplitData TABLE  (
    chars varchar(2)
    )

    INSERT INTO @SplitData SELECT * FROM char_split(@string)

    DECLARE @Output varchar(max)

    SELECT @Output = coalesce(@Output,' ') + cast(chars as varchar(10)) 
    from @SplitData
    order by chars asc

    RETURN @Output
END

declare @string varchar(max)
set @string = 'Hello'
select dbo.rearrange(@string)

当我尝试运行此代码时,出现此错误:

 'CREATE FUNCTION' must be the first statement in a query batch.

我尝试将每个函数包含在BEGIN END块中,但没有运气。有什么建议?

2 个答案:

答案 0 :(得分:3)

只需在UDF的定义之间使用GO语句

答案 1 :(得分:0)

不可行。就像那样。

你可以在它们之间使用GO来表达它。

但由于GO是批量分隔符....这意味着您发送了多个批次,这在您的问题中明确没有通知。

所以,不是 - 由于错误清楚地表明,不可能在一个批次中这样做。