我需要做的是使用T-SQL将数据导出到CSV文件中。
而且我很困惑,有很多方法可以做到,我不知道选择哪一个,请帮我确认一下:
据我所知,大约有3种方法,我希望你帮我确认一下:
INSERT INTO OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'Text;Database=C:\Temp\;HDR=Yes;',
'SELECT * FROM test.csv')
(object_id, name)
SELECT object_id, name
FROM sys.tables;
但这需要csv文件,并带有标题
命令行。
使用union,获取数据及其列标题。
这是我对T-SQL导出到CSV的全部理解,请帮我确认一下。
还有其他方法可以导出到CSV吗?
谢谢!
您可以使用UNION创建标题行,如下所示:
SELECT 'object_id', 'name'
UNION ALL
SELECT object_id, name
FROM sys.tables
在SQL Server中执行以下命令:
EXEC xp_cmdshell 'SQLCMD -S . -d MsVehicleReg2 -Q "SELECT * FROM tempViolationInfo" -s "," -o "O:\result.csv"';
这是T-SQL方式:
INSERT INTO OPENROWSET('Microsoft.ACE.OLEDB.12.0','Text;Database=D:\;HDR=YES;FMT=Delimited','SELECT * FROM [FileName.csv]')
SELECT Field1, Field2, Field3 FROM DatabaseName
但是,有几点需要注意:
对于Ace.OLEDB.12.0(新的Jet可再发行引擎),您可以安装32位或64位独立引擎,即使您已经安装了“其他风格”,无论是否自己,来自Access,等等:
使用/ passive命令行选项:
(32位):AccessDatabaseEngine.exe /被动(64位):AccessDatabaseEngine_64.exe /被动
就我而言,我有64位SQL Express 2008 R2,并安装了32位Office 12应用程序(因此,安装了32位ACE驱动程序)。我安装了64位AccessDatabaseEngine_64.exe,现在它对我有用......
此外,这是假设您已完成其他配置工作:
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0',N'AllowInProcess',1 GO
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0',N'DynamicParameters',1 GO
sp_configure'show advanced options',1; GO RECONFIGURE; GO sp_configure'Ad Hoc Distributed Queries',1; GO RECONFIGURE;走
关于“最佳实践”,没有最佳实践。有几种选择,不限于: