SQL Server管理工具错误:用户定义函数脚本执行失败

3

我正在使用SSMS与本地和远程SQL Server实例一起工作。我创建了一个小函数:

create function ufnTestFunc ()
returns int
begin
    return 1
end

当我尝试“修改”或选择“脚本函数为 -> 修改”时,会出现如下错误提示:
“用户定义函数 'dbo.ufnTestFunc' 的脚本执行失败。(Microsoft.SqlServer.Smo)
- 用户定义函数 'ufnTestFunc' 的 TextHeader 中存在语法错误。(Microsoft.SqlServer.Smo)”
已存在的函数也会发生同样情况。可能是什么原因导致的呢?
注:
- 所有函数都按预期工作 - 我可以将函数脚本为“创建”而没有任何问题 - 这与注释无关,因为测试函数中没有注释 - 在远程服务器上的不同数据库中也会发生相同的情况
本地服务器: Microsoft SQL Server Express Edition (64-bit) - 10.50.2500.0
远程服务器: Microsoft SQL Server Web Edition (64-bit) - 10.50.1600.1
SSMS:
Microsoft SQL Server Management Studio    10.50.2500.0
Microsoft Data Access Components (MDAC)   6.1.7601.17514
Microsoft MSXML                           3.0 6.0 
Microsoft .NET Framework                  2.0.50727.5448

没有机会使用类似 SQL Profiler 这样的工具吗? - Andriy M
实际上,分析器可能会提供有关该问题的更多信息。但现在似乎是一个错误,所以我仍然需要通过试错来找到它 -)感谢您的评论。 - DarkWingDuck
3个回答

2

好的,就像之前有人提到的一样,但是有一点不同。

问题出在AS关键字上。虽然函数内容前的AS关键字是可选的,但是SSMS无法处理没有它的函数。它们可以工作,但会出现问题。这是一个错误,在BOL中没有提到。

我通常使用AS关键字,但这次数据库来自之前的编码者,他没有使用它。在我的测试函数中,我也没有使用它,以使函数尽可能小。


2

运行 sp_helptext N'ufnTestFunc'

上面函数的“注释”部分是否有看起来不正常的内容?

嵌入式注释/* */有时会导致该错误。

示例:

/* 
    This function does something. 
    /* NOTE: not any useful, though */
    More stuff...
*/
alter function ufnTestFunc ()
returns int
begin
    return 1
end

那么,这个函数的文本头部分没有任何内容? - jim31415
不,只是函数本身。我运行的create function脚本的第一行就是“create function”本身的那一行。 - DarkWingDuck

0

--补充说明,我收到了这个错误,无法编写脚本或修改存储过程。

问题是一个块注释部分内联在另一个块注释中。

/*  
Example call:  
 Exec [usp_mySproc] @Param = '172777'  /* blah, blah */
 Exec [usp_mySproc] @Param = '172777', @Debug = 1   WITH RECOMPILE   
*/ 

删除了内部注释块,没有问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接