创建一个批处理多的UDF - SQL服务器

创建一个批处理多的UDF - SQL服务器

问题描述:

我问这个问题的SQL Server 2008 R2创建一个批处理多的UDF - SQL服务器

我想知道如果在一个批处理语句来创建多个功能的方式。

我以下面的代码为例;假设我想要一个字符串并按字母顺序重新排列它的字母。所以,“你好”将成为“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块封闭的各项功能,但没有运气。有什么建议?

+0

只要在UDF的定义之间使用GO语句 – 2014-12-02 21:58:43

+0

哈哈哈哈,我其实只是回答我自己的问题!是的......使用'GO'就像一个魅力。如果它对其他人有帮助,我会留下问题。 – user2192320 2014-12-02 21:59:40

+0

最好将其作为答案并接受它,对于那些稍后来这里的人来说。 – 2014-12-02 22:00:33

只需使用的UDF的

+0

从技术上讲,这是无效的,因为它将它们分成多批 - GO是批量分隔符。问题要求一批。 – TomTom 2014-12-03 06:16:47

+0

@TomTom这是正确的。我认为OP需要重述这个问题,因为恕我直言,他真正想要的是执行一个包含多个UDF定义的SQL脚本。 – 2014-12-03 06:39:40

不可行的定义之间的GO声明。像这样。

你可以使它成为一个使用他们之间的语句。

但是,由于GO是一个批量分隔符....这意味着您发送多个批次,这是明确不是在你的问题通缉。

所以,不 - 不可能在一个批次中做到这一点,因为错误清楚地表明。