我需要在T-SQL中将数据导出到CSV(带有标头)中的最佳做法

Guo*_*ang 5 sql t-sql csv sqlcmd sql-agent-job

我需要做的是使用T-SQL将数据导出到CSV文件中。

我很困惑有很多方法可以做到,我不知道选择哪种方法,请帮助我确认以下内容:

据我了解,大约有3种方法,希望您能帮助我确认一下:

使用Microsoft.Jet.OLEDB.4.0,如下所示:

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;
Run Code Online (Sandbox Code Playgroud)

但这需要csv文件存在,并且带有标头

使用SQLCMD

命令行。

使用BCP

使用联合,获取数据及其列标题。

这是我对将T-SQL导出到CSV的全部理解,请帮助我确认。

还有其他导出到CSV的方法吗?

谢谢!

Jim*_*Jim 5

您可以使用UNION创建标题行,如下所示:

SELECT 'object_id', 'name'

UNION ALL

SELECT object_id, name
FROM sys.tables
Run Code Online (Sandbox Code Playgroud)


小智 5

在SQL Server中执行以下命令:

EXEC xp_cmdshell 'SQLCMD -S . -d MsVehicleReg2 -Q "SELECT * FROM tempViolationInfo" -s "," -o "O:\result.csv"';
Run Code Online (Sandbox Code Playgroud)

  • 欢迎使用Stack Overflow!我认为您应该解释命令的作用。如果详细说明了所建议的每个命令,那将非常有用。但您不必。 (2认同)

Slo*_*ire 5

这是 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
Run Code Online (Sandbox Code Playgroud)

但是,有一些注意事项:

  1. 您需要有可用的 Microsoft.ACE.OLEDB.12.0 提供程序。Jet 4.0 提供程序也可以工作,但它很古老,所以我使用了这个。

  2. .CSV 文件必须已经存在。如果您使用标头 (HDR=YES),请确保 .CSV 文件的第一行是所有字段的分隔列表。