0

フォルダーから OpenRowSet を使用して XML ファイルを読み込もうとしましたが、それができず、エラーが発生しました

"' @FullFilename'' が存在しないため、一括読み込みできません。

各 XML ファイルからすべてのデータを取得するために問題を修正する方法を提案していただければ幸いです。

ありがとう。

コード:

declare @Directory varchar(50)
select @Directory = 'E:\XML\'

DECLARE @CD TABLE (XMLData XML);
declare @FileExist int
DECLARE @FileName varchar(500),
@DeleteCommand varchar(1000),
@FullFileName varchar(500)

DECLARE @SQL NVARCHAR(1000),@xml xml

--This is so that we know how long the loop lasts
declare @LoopID int, @MaxID int
SELECT @LoopID = min(id),@MaxID = max(ID)
FROM #tempList

WHILE @LoopID <= @MaxID
BEGIN
    SELECT @FileNAme = filename
    from #tempList
    where id = @LoopID

    SELECT @FullFileName = @Directory + @FileName 
    print @FULLFileName

    exec xp_fileexist @FullFileName , @FileExist output

    if @FileExist =1 --sanity check in case some evil person removed the file
    begin

---********************************Problem with @FullFileName----------------     
    INSERT INTO @CD
    SELECT *
    FROM OPENROWSET(BULK ''' + @FullFileName +''' ,Single_BLOB) as rs
---********************************------------

    select * from @CD

    --SET @DeleteCommand = 'del ' +  @Directory + @FileName 
    --maybe you want to delete or move the file to another directory
    -- ** here is how to delete the files you just imported
    -- uncomment line below to delete the file just inserted
    --EXEC MASTER..XP_CMDSHELL @DeleteCommand
    -- ** end of here is how to delete the files
    end

    --Get the next id, instead of +1 we grab the next value in case of skipped id values
    SELECT @LoopID = min(id)
    FROM #tempList
    where id > @LoopID
END

select * from #tempList

これは機能し、指定されたファイルから XML データを取得できます

DECLARE @CD TABLE (XMLData XML);
Declare @get_GeneralID bigint
INSERT INTO @CD
SELECT *
FROM OPENROWSET(BULK N'E:\XML\TestResult.XML', SINGLE_BLOB) rs;
select * from @CD

PS: Web で見つけたコードをまとめました。

4

1 に答える 1

0

コマンドでT-SQL変数を使用できるとは思いません。OPENROWSETこれらの変数は、完全かつ明示的に記述する必要があります。

XMLファイルのリストに対してこれを行う必要がある場合は、T-SQLコマンドを文字列として作成してから、動的SQLを使用してそのコマンドを実行する必要があります。

于 2013-03-12T14:01:37.487 に答える