FOR XML 安全性考量 (SQLXML 4.0)
FOR XML AUTO 模式會產生 XML 階層,在此階層中,元素名稱會對應到資料表名稱,而屬性名稱會對應到資料行名稱。這樣會公開資料庫資料表和資料行資訊。當您在查詢中指定資料表和資料行別名來使用 AUTO 模式 (伺服器端格式化) 時,可以隱藏資料庫資訊。這些別名會當做產生之 XML 文件中的元素和屬性名稱來傳回。
例如,下列查詢會指定 AUTO 模式;因此,XML 格式化是在伺服器上完成:
SELECT P.FirstName AS F,P.LastName AS L
FROM Person.Person AS P
FOR XML AUTO
在產生的 XML 文件中,這些別名是用於元素和屬性名稱:
<?xml version="1.0" encoding="utf-8" ?>
<root>
<P F="Nancy" L="Fuller" />
<P F="Andrew" L="Peacock" />
<P F="Janet" L="Leverling" />
...
</root>
當您使用 NESTED 模式 (用戶端格式化) 時,只有產生之 XML 文件中的屬性才會傳回別名。基底資料表的名稱一定會當做元素名稱傳回。例如,下列查詢會指定 NESTED 模式。
SELECT P.FirstName as F,P.LastName as L
FROM Person.Person AS P
FOR XML AUTO
在產生的 XML 文件中,基底資料表的名稱會當做元素名稱傳回,而且不會使用資料表別名:
<?xml version="1.0" encoding="utf-8" ?>
<root>
<Person.Person F="Nancy" L="Fuller" />
<Person.Person F="Andrew" L="Peacock" />
<Person.Person F="Janet" L="Leverling" />
...
</root>