2015-03-31 51 views
1

我要评论添加到我的SQL CLR功能(如我做其他SQL对象我创建或编辑 - 函数,过程和视图)。不幸的是,我无法为SQL CLR对象执行此操作。如何向SQL CLR函数添加注释?

例如,下面的代码:

SET ANSI_NULLS ON 
GO 

SET QUOTED_IDENTIFIER ON 
GO 

-- ================================================================================================================================= 
-- Author:   gotqn 
-- Create date:  2015-03-25 
-- Description:  Converts a string that has been encoded for transmission in a URL into a decoded string. 
-- Usage Example: 
/* 
        SELECT [dbo].[fn_UrlDecode]('http://stackoverflow.com/search?q=tql+sql+server'); 
*/  
-- ================================================================================================================================= 
CREATE FUNCTION [dbo].[fn_UrlDecode] (@value NVARCHAR(MAX)) 
RETURNS NVARCHAR(MAX) 
AS EXTERNAL NAME [Utils].[Utils].[UrlDecode] 
GO 

当功能脚本从SQL Management studio会产生这样的:

SET ANSI_NULLS OFF 
GO 

SET QUOTED_IDENTIFIER OFF 
GO 

CREATE FUNCTION [dbo].[fn_UrlDecode](@value [nvarchar](max)) 
RETURNS [nvarchar](max) WITH EXECUTE AS CALLER 
AS 
EXTERNAL NAME [Utils].[Utils].[UrlDecode] 
GO 

我试图解决这个问题之后,在移动的注释部分AS,因为这是为视图添加注释的方式,但它又失败了。然后我试图把CREATE条款后的注释放在EXTERNAL NAME ...条款后面,但没有任何改变。

有没有办法来解决这个问题?

+0

有没有办法改变这一点,只要我知道。与例如“CREATE TABLE”语句中的注释 - 因为SQL Server将它分开并存储*表示*而不是原始文本,注释不会保留下来,并且在重新编写对象时获得的结果是SQL Server可以从替代表示。 – 2015-03-31 14:48:29

回答

2

基本上,如果它不是列为具有存储在sys.sql_modules然后创建该对象的原始文本不被保留,因此注释不保留数据的类型。没有CLR对象存储这样的文本。

+0

确实,CLR功能没有在那里列出。我想现在没有什么可以做的了。 – gotqn 2015-03-31 15:02:48

0

这是预期的行为。即使您编写的本地TSQL脚本在例程签名之前添加注释,也可以针对DBMS构建它,然后执行右键单击/编辑以查看代码,评论将不会在那里。继续尝试这种方法:

CREATE FUNCTION [dbo].[fn_UrlDecode] 
(
    @value [nvarchar](max) 
) 
RETURNS [nvarchar](max) WITH EXECUTE AS CALLER 
AS 
/* 
    ***All the comments goes here*** 
*/ 
EXTERNAL NAME [Utils].[Utils].[UrlDecode] 
GO 

希望它有帮助!

+0

它正在''正常''工作。你的方法适用于'views'。我已经尝试过这种技术,但结果是一样的。 – gotqn 2015-03-31 14:45:32

3

虽然@Damien对于是正确的,但为什么评论没有保存,所以存储注释仍然存在一些变通方法:扩展属性。

例如:

EXEC sys.sp_addextendedproperty @name = N'comments', @value = N' 
-- ================================================================================================================================= 
-- Author:   gotqn 
-- Create date:  2015-03-25 
-- Description:  Converts a string that has been encoded for transmission in a URL into a decoded string. 
-- Usage Example: 
/* 
        SELECT [dbo].[fn_UrlDecode](''http://stackoverflow.com/search?q=tql+sql+server''); 
*/  
-- ================================================================================================================================= 
', @level0type = 'SCHEMA', @level0name = N'dbo', 
    @level1type = 'FUNCTION', @level1name = N'fn_UrlDecode'; 

你只需要逃避你嵌入的单引号。

SELECT [value] 
FROM sys.fn_listextendedproperty(N'comments', 'SCHEMA', N'N'dbo', 
           'FUNCTION', N'fn_UrlDecode', NULL, NULL); 

小的额外注:

然后你就可以通过检索它们,如果你永远不会解码是超过4000个字符长的URL(和我敢肯定,你赢了”牛逼碰上许多是甚至超过2048个字符),那么你将得到更好的服务使用NVARCHAR(4000)用于输入和输出的数据类型为,这将是颇有几分比如果任何更快,或两者都NVARCHAR(MAX)

+1

谢谢。我知道'sys.sp_addextendedproperty' - 只是想知道为什么它不适用于'CLR'函数 - 似乎答案是'按设计'。感谢'CLR'提示。 – gotqn 2015-03-31 17:07:39