熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> SQL Server >> 正文

獲得XML格式的SQL Server圖表結構

2022-06-13   來源: SQL Server 

  程序員經常問我在SQL Server 中是否有內置的存儲過程 將圖表結構以XML格式返回
  如果前端或中間層的代碼將數據轉給XML格式的存儲過程類似下面的圖表結構將會比較有用
  <orders>
     <OrderID> <OrderID/>
     <CustomerID> <CustomerID/>
     <EmployeeID> <EmployeeID/>
     <OrderDate> <OrderDate/>
     <RequiredDate> <RequiredDate/>
     <ShippedDate> <ShippedDate/>
     <ShipVia> <ShipVia/>
     <Freight> <Freight/>
     <ShipName> <ShipName/>
     <ShipAddress> <ShipAddress/>
     <ShipCity> <ShipCity/>
     <ShipRegion> <ShipRegion/>
     <ShipPostalCode> <ShipPostalCode/>
     <ShipCountry> <ShipCountry/>
  </orders>
  
  一旦程序員擁有圖表的XML框架 他們就可定義傳到存儲過程的XML字符串的屬性和元素的同樣名稱這樣通過OPENXML函數來編寫存儲過程就很簡單了你不需要再要了解前端XML的屬性和元素如何被映射到特定圖表的列名了
  
  不幸的是 沒有內置的存儲過程可以返還圖表的XML框架但開發一個不難特定圖表中的列名可以通過查尋syscolumns系統圖表inlumns的view或執行sp_columns系統存儲過程獲得這篇文章中我用的是inlumns 因為微軟推薦information_schema view而不是系統圖表注意存儲過程只接受兩個參數圖表名和擁有者名稱 這是必要的 因為在一個數據庫中多個用戶可以擁有同樣名稱的圖表如果你不指定數據庫的擁有者 存儲過程將會假設你需要建立一個數據庫本身擁有的圖表
  
  CREATE PROCEDURE dboget_table_xml_structure (
   @table_name VARCHAR()
   @owner_name VARCHAR() = dbo
  )
  AS
  SET NOCOUNT ON
  /* table variable to hold values */
  DECLARE @temp TABLE (
   string_value VARCHAR()
   )
  
  /* check if the table exists */
  
  IF NOT EXISTS (
   SELECT aname
   FROM sysobjects a INNER JOIN sysusers b
   ON auid = buid
   AND atype = u
   AND aname = @table_name
   AND bname = @owner_name)
  
  BEGIN
   RAISERROR(incorrect table name specified try again
  )
   RETURN
  END
  
  INSERT @temp
  SELECT < + @table_name + >
  
  /* append a few blank spaces to make the output readable */
  INSERT @temp
  SELECT    < + column_name + > +  < + column_name
  + />
  FROM inlumns
  WHERE
   table_name = @table_name
  AND
   table_schema = @owner_name
  ORDER BY ordinal_position
  
  INSERT @temp
  SELECT
  
  一旦存儲過程生成 你可以按以下方式執行
  EXEC get_table_xml_structure orders dbo
From:http://tw.wingwit.com/Article/program/SQLServer/201311/22001.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.