我问的是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块中,但没有运气。有什么建议?
答案 0 :(得分:3)
只需在UDF的定义之间使用GO
语句
答案 1 :(得分:0)
不可行。就像那样。
你可以在它们之间使用GO来表达它。
但由于GO是批量分隔符....这意味着您发送了多个批次,这在您的问题中明确没有通知。
所以,不是 - 由于错误清楚地表明,不可能在一个批次中这样做。