5

NTEXTがなくなり、ここにはより大きなベストプラクティスの問題があることはわかっていますが(XMLをNTEXT列に格納するなど)、属性値を取得する必要があるXMLを含むテーブルがあります。これはsp_xml_preparedocumentを使用して簡単に実行できるはずですが、NTEXT型のローカル変数を宣言できず、式を使用して関数に渡されるXMLテキストを指定する方法がわからないため、さらに注意が必要です。XMLまたはVARCHAR(MAX)データ型があるため、SQL 2005ではこのようにできますが、SQL 2000では何ができますか?

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)
4

1 に答える 1

6

素晴らしい質問ですが、解決策はありません

考え:

  • SELECT呼び出しをUDFでラップすることはできません(一種のダミーのntextローカル変数を作成するため)
  • sp_xml_preparedocument拡張ストアドプロシージャを呼び出すことができないため、(SELECTで使用するために)スカラーUDFで呼び出しをラップすることはできません。
  • 文字列の制限とscopの問題が発生するため、動的に実行する呼び出しを連結することはできません
  • OPENQUERYを使用したセルフコールも同様です
  • textptr+READTEXTをパラメータとして追加することはできませんsp_xml_preparedocument

では、なぜsp_xml_preparedocumentntextをデータ型として使用するのでしょうか。

于 2009-04-09T18:59:26.237 に答える