2015-03-31 19 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