Sql-Server

如何在 MS_Description 擴展屬性中格式化文件?

  • March 10, 2020

我正在使用“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 嗎?
@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在有人修改程序時可能容易被無意排除,因此將評論保留在正文中可能更安全*。**)*

在不使用擴展屬性的情況下在數據庫中儲存表和列的文件有點棘手。但同樣,我認為這些無論如何都應該在外部記錄。如果您打算為這些事情編寫文件,那麼您不妨將它放在一個在數據庫向南時仍然存在的地方。

引用自:https://dba.stackexchange.com/questions/84280