程序員經常問我在SQL Server 2000中是否有內置的存儲過程, 將圖表結構以XML格式返回。
如果前端或中間層的代碼將數據轉給XML格式的存儲過程。類似下面的圖表結構將會比較有用:
一旦程序員擁有圖表的XML框架, 他們就可定義傳到存儲過程的XML字符串的屬性和元素的同樣名稱。這樣通過OPENXML函數來編寫存儲過程就很簡單了---你不需要再要了解前端XML的屬性和元素如何被映射到特定圖表的列名了。
不幸的是, 沒有內置的存儲過程可以返還圖表的XML框架。但開發一個不難。特定圖表中的列名可以通過查尋syscolumns系統圖表,information_schema.columns的view,或執行sp_columns系統存儲過程獲得。這篇文章中我用的是information_schema.columns, 因為微軟推薦information_schema vIEw而不是系統圖表。注意存儲過程只接受兩個參數:圖表名和擁有者名稱, 這是必要的。 因為在一個數據庫中多個用戶可以擁有同樣名稱的圖表。如果你不指定數據庫的擁有者, 存儲過程將會假設你需要建立一個數據庫本身擁有的圖表。
CREATE PROCEDURE dbo.get_table_XML_structure (
@table_name VARCHAR(255),
@owner_name VARCHAR(30) = 'dbo'
)
AS
SET NOCOUNT ON
/* table variable to hold values */
DECLARE @temp TABLE (
string_value VARCHAR(4000)
)
/* check if the table exists */
IF NOT EXISTS (
SELECT a.name
FROM sysobjects a INNER JOIN sysusers b
ON a.uid = b.uid
AND a.type = 'u'
AND a.name = @table_name
AND b.name = @owner_name)
BEGIN
RAISERROR('incorrect table name specifIEd, try again', 16,
1)
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 information_schema.columns
WHERE
table_name = @table_name
AND
table_schema = @owner_name
ORDER BY ordinal_position
INSERT @temp
SELECT '
一旦存儲過程生成,歡迎光臨
學網,
收藏本篇文章 [1] [2]
$False$
你可以按以下方式執行:
EXEC get_table_XML_structure 'orders', 'dbo'