2009-04-09 77 views
4

我知道NTEXT正在消失,並且這裏存在更大的最佳實踐問題(如在NTEXT列中存儲XML),但是我有一個包含XML的表,我需要從中獲取屬性值。這應該很容易使用sp_xml_preparedocument來完成,但是由於您無法聲明NTEXT類型的局部變量並且我無法弄清楚如何使用表達式來指定傳遞給該函數的XML文本這一事實,因此變得更加棘手。我可以在SQL 2005中像這樣做,因爲XML或VARCHAR(MAX)數據類型,但是我可以爲SQL 2000做些什麼?如何在SQL 2000中對NTEXT查詢的結果使用sp_xml_preparedocument?

DECLARE @XmlHandle int 
DECLARE @ProfileXml xml 
SELECT @ProfileXml = ProfileXml FROM ImportProfile WHERE ProfileId = 1 

EXEC sp_xml_preparedocument @XmlHandle output, @ProfileXml 

-- Pluck the Folder TemplateId out of the FldTemplateId XML attribute. 
SELECT FolderTemplateId 
FROM OPENXML(@XmlHandle, '/ImportProfile', 1) 
WITH( 
FolderTemplateId int '@FldTemplateId') 

EXEC sp_xml_removedocument @XmlHandle 

我唯一能想出來的SQL 2000就是使用varchar(8000)。是否真的沒有辦法使用像下面這樣的表達式?

EXEC sp_xml_preparedocument @XmlHandle output, (SELECT ProfileXml FROM ImportProfile WHERE ProfileId = 1) 

回答

6

大問題..但是沒有解決

思考:

  • 不能包裹SELECT調用的UDF(創造一種虛擬的NTEXT局部變量)
  • 由於無法調用擴展存儲過程,您無法將sp_xml_preparedocument調用換成標量UDF(在SELECT中使用)
  • 您無法將調用連接爲動態運行,因爲使用你擊弦的限制和SCOP發出
  • 同上一個自己的呼叫使用OPENQUERY
  • TEXTPTR + READTEXT不能被添加作爲參數傳遞給sp_xml_preparedocument

那麼,爲什麼sp_xml_preparedocument採取NTEXT爲數據類型?

+0

你也可以通過varchar,char,text等,所以我不會責怪sp_xml_preparedocument。我試圖在另一個存儲過程中包裝sp_xml_preparedocument,但我遇到了不能使用表達式將ntext參數傳遞給包裝過程的相同問題。 – flipdoubt 2009-04-09 19:09:13

相關問題