2011-02-08 6 views
0

bcpを使用してデータベースからxmlファイルを作成したいとします。ホストファイルの列は、サーバにコピーするときだけスキップすることができます。

次のコードこれは、コードエラーであるSQL Server 2008で動作しますが、いないSQL Expressの2005

: のMicrosoft SQL Server Management StudioのExpressの::9.00 SQLState = S1000, NativeError = 0 Error = [Microsoft][SQL Native Client] Host-file columns may be skipped only when copying into the Server

は、これらは、SQL Expressの情報です.4035.00

Microsoftデータアクセスコンポーネント(MDAC):2000.085.1132.00(xpsp.080413-0852)

のMicrosoft MSXML:2.6 3.0 4.0 5.0 6.0

のMicrosoft Internet Explorer 8.0.6001.18702

は、Microsoft .NET Framework:2.0.50727.3615

SO:2600年5月1日

これは私のコードです:

DECLARE @FileName VARCHAR(150) 
DECLARE @dataExport AS DATETIME 
DECLARE @param VARCHAR(8) 

SET @FileName = 'c:\BackupSql\XMLOutput.xml' 
SET @dataExport = '20110122' 
SET @param = 'XXX' 

DECLARE @SQLCmd VARCHAR(1800) 

SELECT @SQLCmd = 'bcp ' + 
'"DECLARE @xml as xml; ' + 
'DECLARE @text varchar(MAX); ' +    
'SET @xml = (select ' + 
'(select ''' + convert(varchar(10), @dateExport, 112) + ''' as DateExport ' + 
'FOR XML PATH (''DATA''), TYPE), ' + 
'(select ' + 
    '(select Item as ITEM, cast(Quantity as int) as QTY, 
convert(decimal(10,6), Price) as PRICE, ''0.0'' as TOTAL, convert(varchar(10), DateInv, 112) as DATE from '+ DB_NAME() +'.dbo.ITEMS where (ITEM not like ''X-%'' and ITEM not like ''Y-%'') and DateInv = ''' + convert(varchar(10), @dateExport, 112) + ''' ' + 
     'FOR XML PATH(''LINE''), TYPE) ' + 
    'FOR XML PATH(''BODY''), TYPE) ' + 
    'FOR XML PATH (''''), ' + 
    'ROOT(''MYROOT''), TYPE); ' + 
'SET @text = REPLACE(CAST(@xml AS varchar(max)), ''><'', ''>'' + CHAR(13) + CHAR(10) + ''<''); ' + 
'SELECT @text" ' + 
' queryout ' + 
@FileName + ' -c -T -S' + convert(varchar(128), serverproperty('servername')) --Trustedonnection e ANSI 

EXECUTE master..xp_cmdshell @SQLCmd 
+0

そして、何を正確に、あなたの質問です?!?! –

+0

このコードはSQL Express 2005では動作しません。理由はわかりません。 XMLファイルを作成しますが、空です。 – vano

答えて

0

私が見つかりました。回避策:

1)私は、 e XMLの内容 2)私は以前のストアドプロシージャをbcpコードで実行しました。

例コード: 私は回避策が見つかりました:

まず私は、XMLコンテンツを返すストアドプロシージャを作成し、その後、私は、BCPのためのコードでそれを呼び出します。

例コード:

-- 1) -------------------------------------------- 

    CREATE PROCEDURE [dbo].[XXX_TransformItemInXML] 

    ( @dateExport as datetime ) 
    AS 
    BEGIN 

    SET NOCOUNT ON 

    DECLARE @xml xml; 
    DECLARE @text varchar(MAX); 

    SET @xml = (select 
      (select convert(varchar(10), GETDATE(), 112) as DATAESPORTAZIONE 
      FOR XML PATH ('DATA'), TYPE), 
       (select 
        (select Item as ITEM, 
         cast(Quantity as int) as QTY, 
        convert(decimal(10,6), Price) as PRICE, 
        '0.0' as TOTAL, 
        convert(varchar(10), DateInv, 112) as DATE 
       from MYDB.dbo.Items 
       where (Item not like 'x-%' 
        and Item not like 'Y-%') 
       and DtaInv = @dateExport 
       FOR XML PATH('LINE'), TYPE) 
      FOR XML PATH('BODY'), TYPE) 
      FOR XML PATH (''), 
      ROOT('MYROOT'), TYPE) 

    SET @text = '<?xml version="1.0" encoding="ISO-8859-1"?>' + CHAR(13) + CHAR(10); 

    SET @text = @text + REPLACE(CAST(@xml AS varchar(MAX)), '><', '>' + CHAR(13) + CHAR(10) + '<'); 

    SELECT @text 

    END 


-- END STORED PROCEDURE ---------------------------------------------------- 

-- BCP CODE ---------------------------------------------------------------- 

    DECLARE @fileName VARCHAR(50) 

    DECLARE @sqlCmd VARCHAR(1500) 

    DECLARE @dataExport 

    SET @dataExport = GETDATE() 

    SET @fileName = 'C:\BackupSql\Output.xml' 

    select @sqlCmd = 'bcp "exec ' + DB_NAME() + '.dbo.XXX_TransformItemInXML ''' + convert(varchar(10),@dateExport, 112) + ''' " queryout ' + 
     @fileName + 
     ' -c -T -S' + convert(nvarchar(128), serverproperty('servername')) -- Trusted connection e ANSI 

    EXECUTE master..xp_cmdshell @SQLCmd 

-- END BCP CODE ------------------------------------------------------------ 
関連する問題