2009-04-09 20 views
4

NTEXTは廃止されており、NTEXT列にXMLを格納するなど、より大きなベストプラクティスの問題があることがわかりますが、XMLを含むテーブルがあり、そこから属性値を抜き取る必要があります。これはsp_xml_preparedocumentを使用して簡単に行う必要がありますが、NTEXT型のローカル変数を宣言できないため、関数に渡されるXMLテキストを式を使って指定する方法がわかりません。私はXMLやVARCHAR(MAX)のデータ型のためにSQL 2005でこれを行うことができますが、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

グレート質問..しかし、無ソリューション

思考:

  • あなたは(ローカルVAR ntext型ダミーの種類を作成する)UDFでのSELECT呼び出しをラップすることはできません
  • 拡張ストアドプロシージャを呼び出せないため、sp_xml_preparedocumentコールをスカラーUDFでラップすることはできません。
  • コールを連結して動的に実行することはできません。 TEXTPTR + READTEXTがsp_xml_preparedocument

にパラメータとして追加することはできませんなぜsp_xml_preparedocumentは、データ型としてntext型取るん

  • 同上にあなたが文字列の制限とSCOP問題
  • を打つだろうOPENQUERY
  • を使用して、自己の呼び出しを使用?

    +0

    また、varchar、char、textなどを渡すこともできます。そのためにsp_xml_preparedocumentを責めません。私は、別のストアドプロシージャでsp_xml_preparedocumentをラップしようとしましたが、ラッププロシージャにntextパラメータを取得するために式を使用できないという同じ問題が発生します。 – flipdoubt

    関連する問題