Sql-Server
如何在 MS_Description 擴展屬性中格式化文件?
我正在使用“MS_Description”擴展屬性來記錄儲存過程中的參數。此參數的文件需要更多的結構,而不僅僅是純文字。那就是我想描述的:“如果value = x,則採取行動A;如果value = y,則採取行動B,……”。
儲存此結構的最佳方法是什麼?
我想到了以下方法:
- 在“MS_Description”中使用 html,例如
EXEC sp_addextendedproperty @name = N'MS_Description', @value = N' Selects the foobar. Can have the following values: <dl> <dt>x</dt><dd>does A</dd> <dt>y</dt><dd>does B</dd></dl>' @level0type = N'SCHEMA', @level0name = [dbo], @level1type = N'PROCEDURE', @level1name = N'SE_DemoProc' @level2type = N'PARAMETER', @level2name = N'DemoPar';
- 開發者 DBA 會自動在頭腦中解析 html 嗎?
- 使用visual studio xml 文件標記extendedproperty,
@value
會變成:@value = N' Selects the foobar. Can have the following values: <list type="bullet"> <item><term>x</term><description>does A</description></item> <item><term>y</term><description>does B</description></item> </list>'
- SSMS、Visual Studio 和/或其他工具是否解釋 MS_Description 擴展屬性中的 Xml 文件標籤?
- ‘’、’’ 和 ’’ 的額外語義是否比 html 更能提高人們的理解力?
使用不同的擴展屬性來記錄參數除外的值?
- 哪個屬性通常用於此?
- 如何編碼這些多個值?
據我所知,對於給定的(模式、過程、參數)組合,擴展屬性只能出現一次。
使用換行符、製表符和“*”來格式化純文字將不起作用,因為空格是從 sql 腳本中折疊的。
- 轉義換行符和製表符是否有效?
也許,我應該完全避免使用 mode 參數,並將這個儲存過程分成幾個不同的過程。(但這將是一個不同的問題,並且超出了這個問題的範圍。)
為什麼要在這裡使用擴展屬性?他們是二等公民,並不是那麼容易被發現。您描述的文件可以很容易地成為儲存過程主體中的塊註釋,或者更好的是,在您的數據字典和/或原始碼控制中(因為這些東西確實應該記錄在數據庫之外的安全位置) .
視圖、函式、觸發器或儲存過程中的塊註釋肯定儲存在數據庫中。兩個
GO
批處理分隔符之間的所有內容都儲存為正文(儘管我承認我不知道哪些視覺化編輯器可能會刪除它們,因為我只使用標準查詢編輯器):GO /* this is a comment */ CREATE PROCEDURE dbo.whatever /* @A is for apple, @J is for jacks */ @A int, @J int AS BEGIN SET NOCOUNT ON; -- do stuff; END GO
(我還要承認,
CREATE PROCEDURE
在 final 之前或之後儲存的評論END
在有人修改程序時可能容易被無意排除,因此將評論保留在正文中可能更安全*。**)*在不使用擴展屬性的情況下在數據庫中儲存表和列的文件有點棘手。但同樣,我認為這些無論如何都應該在外部記錄。如果您打算為這些事情編寫文件,那麼您不妨將它放在一個在數據庫向南時仍然存在的地方。