A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
SQL Server上でXMLファイルを読み込むには、
「SQL Server Integration Services(以下、SSIS)」の機能を
使えばできますが、ストアドではできません。
もし、.NET + VB.NET の技術をお持ちであれば、SSISの機能で
作ることをお勧めします。
SSISについて
http://www.microsoft.com/japan/sql/prodinfo/feat …
# ストアドから、SSISのモジュールを呼び出すことも可能です。
(sp_start_jobというストアドで呼び出せます)
ただし、SSISじゃなく、どうしてもストアドでやりたい場合は、
制限付ではありますが、動くサンプルを作ってみました。
制限内容:
・XMLファイルがSJISであること
・SQL Serverの設定で、xp_cmdshellストアドが動く
サーバ環境にあること
# xp_cmdshellの動作を許可するには、事前に下記のストアドを
流し、管理者ユーザで、サーバ設定を変更する必要があります。
----------------------------------------------------------
sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
EXEC sp_configure 'xp_cmdshell', 1;
GO
RECONFIGURE;
----------------------------------------------------------
もし、それらの制限が回避できるのであれば、下記のコードで
XMLファイルをストアドから読み込むことができます。
master DBにある「dbo.xp_cmdshell」というストアドを呼び出し、
XMLの内容をDOSのtypeコマンドで取得。
取得した結果を「#」付のテーブル名(ようは、tempDBに一時格納)
させ、展開させ、後は、sp_xml_preparedocument やOPENXMLを
使って、XMLを目的に合わせてデータ処理すれば、宜しいかと
思います。
■ストアドからXMLファイルを読み込む
declare @buffer nvarchar(max)
declare @maxLine int
declare @i int
declare @line nvarchar(max)
-- tempdbに一時テーブルを作成する
create table #tempXML(lineBuffer nvarchar(max))
-- DOSのTYPEコマンドでXMLファイルの内容を表示させ、tempdbに作成した#tempXMLテーブルに内容を書き込む
insert into #tempXML exec master.dbo.xp_cmdshell 'type C:\abc.xml'
-- 初期化
SET @i = 0
SET @buffer = ''
-- XMLファイルの行からバッファを生成する
declare cur cursor for select * from #tempXML
open cur
fetch next from cur into @line
while @@FETCH_STATUS = 0
begin
if @line is not null and PATINDEX('%<!--%', @line) = 0
begin
set @buffer = @buffer + @line
end
fetch next from cur into @line
end
close cur
deallocate cur
-- XMLファイルから読み込んだXML文字列を取得する
select @buffer
-- 一時テーブルを削除する
drop table #tempXML
-- XMLパーサーでXML用のノード階層を作る
declare @hdoc int
exec sp_xml_preparedocument @hdoc output, @buffer
-- ノードをテーブルに格納したイメージを表示
select *
from OPENXML (@hdoc, '/views/view',1)
-- XMLパーサー解析用ハンドルを閉じる
exec sp_xml_removedocument @hdoc
長くなりましたが、ご参考になれば、幸いです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) pythonでクラスで複数のメソッドを利用する方法 2 2022/04/15 04:17
- XML エクセルのマクロについて教えてください。 3 2023/02/06 09:06
- WordPress(ワードプレス) ワードプレスにて .xmlファイルの使い方をご存知の方、よろしくお願いいたします。 2 2022/09/30 00:55
- Windows 10 *jpgファイルと日付データだけをホルダに移動するには 1 2023/01/16 22:19
- フリーソフト mmfファイルからmp3に変換できる方法を教えてください(XMediaRecode以外で) 2 2022/03/22 22:25
- Windows 10 windows 10の操作で 質問です 3 2023/05/11 11:13
- XML XML同じ名前の要素を自動で集約するツール 1 2022/04/11 09:21
- Visual Basic(VBA) vbaのエラー対応(実行時エラー7:メモリが不足しています) 4 2023/04/24 00:20
- Visual Basic(VBA) vbaの構文の修正相談(xmlファイルを順に開いてコピペ作業) 1 2023/04/22 01:18
- その他(IT・Webサービス) 見たことのない形式で日付が表示されているのでそれを解析してほしい 3 2023/01/23 16:53
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ストアド、トリガーの同時呼出
-
T-SQLで一時テーブルの名前を毎...
-
エクセルでCtrl+Tでテーブルの...
-
「マスタ」と「テーブル」の違...
-
2つのテーブルから条件に一致...
-
重複するキーから一番古い年月...
-
ACCESSのSQLで、NULLかNULLでな...
-
SELECT文でのデッドロックに対...
-
Accessにインポートしたら並び...
-
Access VBA Me.Requery レコー...
-
SQLServer Insertが遅い
-
AccessでCSVインポートのゼロサ...
-
主キーにインデックスは貼らな...
-
SELECT時の行ロックの必要性に...
-
ACCESSのODBCリンクテーブルに...
-
ACCESS2007 フォーム 「バリア...
-
Accessでの禁止文字チェック
-
実行時エラー3086 削除クエリ...
-
2つの項目が重複するレコード...
-
列名XXXXが無効です
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SQLServer 分散トランザクショ...
-
ストアド更新履歴
-
トリガが完全にかからない
-
エクセルアドインの使用方法に...
-
ストアド、トリガーの同時呼出
-
SQL Server INSERTのトリガで採番
-
SQLServerでOracleシーケンスの...
-
SQLServerでフィールドの名称の...
-
SQLServer7.0 重大な例外「EXCE...
-
NETWORKDAYS関数について
-
ソリューションエクスプローラ...
-
ストアドプロシージャでのファ...
-
ストアドでコンピュータ名の取得
-
削除時のトリガについて
-
トリガーについて
-
ブックストアの在庫数
-
ADOからのストアド実行でエラー...
-
usbでえーー
-
ストアドでXMLファイルを読込む...
-
「マスタ」と「テーブル」の違...
おすすめ情報