Sql-Server-2008
SQL Server - 將表導出到 XML 文件
我需要將 sql server 2008 R2 數據庫的所有表 (500) 導出到 XML。最好和最快的方法是什麼?
可以使用 BCP 實用程序來完成這項工作。
先決條件:
- 您需要配置您的伺服器,以啟用
xp_cmdshell
:EXEC master.dbo.sp_configure 'show advanced options', 1 RECONFIGURE EXEC master.dbo.sp_configure 'xp_cmdshell', 1 RECONFIGURE
- 權限,哪個帳戶
xp_cmdshell
正在執行?xp_cmdshell 'whoami'
- 創建一個新文件夾,您將在其中保存文件,並將對該文件夾的完全訪問權限授予步驟 2 的使用者。
我建議您首先嘗試使用幾個表,
TOP
為游標選擇添加一個條件,以驗證此腳本在您的伺服器中執行良好。select TOP 3 TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME from INFORMATION_SCHEMA.Tables where TABLE_TYPE = 'BASE TABLE';
基本上,腳本從 中獲取表列表
INFORMATION_SCHEMA
,並為列表中的每個元素執行 BCP 實用程序。XML 文件將被命名為:
DATABASE_SCHEMA_TABLE.XML
這是完整的腳本,在執行它之前,
<...>
根據您的系統配置替換包含的值:use <your_database> go declare @ServerInstance nvarchar(50), @Database sysname, @Schema sysname, @Table sysname, @RootFolder nvarchar(165), @BcpParams nvarchar(100), @cmdBCP nvarchar(500), @FQI varchar(600), @FileName varchar(600), @retExec int; set @ServerInstance = '<server\instance>'; set @BcpParams = '-t -T -w'; set @RootFolder = '<folder_name>'; declare curXml cursor fast_forward for select TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME from INFORMATION_SCHEMA.Tables where TABLE_TYPE = 'BASE TABLE'; open curXml; fetch next from curXml into @Database, @Schema, @Table while @@FETCH_STATUS = 0 begin set @FQI = @Database + '.' + @Schema + '.' + @Table; set @FileName = @RootFolder + @Database + '_' + @Schema + '_' + @Table + '.xml'; select @cmdBCP = ' bcp "SELECT * FROM ' + @FQI + ' row FOR XML AUTO, ROOT(''' + @Table + '''), elements"' + ' queryout "' + @FileName + '" ' + @BcpParams + ' -S ' + @ServerInstance; print @cmdBCP; EXEC @retExec = xp_cmdshell @cmdBCP; if @retExec <> 0 begin close curXml; deallocate curXml; raiserror('BCP Error', 16, 1); end fetch next from curXml into @Database, @Schema, @Table; end close curXml; deallocate curXml;