我正在尝试导出我的 sql 查询结果,我希望在您执行查询时自动执行该结果。我已经看到了使用我尝试使用的输出的示例,但这会给我一个语法错误,就像示例一样,Select * From dbo.anyTable Output to但是对我来说,在我的查询中有一个where 和内部连接的地方,我有一个) a在它之后,这就是我认为是问题。我知道可以通过右键单击鼠标并将结果另存为来保存它,但这不是我理想中想要的,因为我想自动化我正在尝试做的整个系统。
例如,我想尝试使用我的部分查询来执行此操作:
Select top 1 a.NAME, COUNT(*) OVER() AS totalRows
From (Select de.NAME From dbo.DEPLOYMENT_ENVIRONMENT as de
Inner join dbo.DEPLOYMENT_RESULT as dr
on dr.ENVIRONMENT_ID = de.ENVIRONMENT_ID
Where @filecontent = de.ENVIRONMENT_ID) a
OUTPUT TO @myPath
FORMAT TEXT
QUOTE '"'
WITH COLUMN NAMES;
Run Code Online (Sandbox Code Playgroud)
编辑 我有以下查询,但它不产生文件或任何错误我做错了什么?
Set @OutputFilePath = 'C:\DeploymentPipelines'
Set @ExportSQL = 'EXEC master.dbo.xp_cmdshell ''bcp
"Select top 1 a.NAME, COUNT(*) OVER() AS totalRows
From (Select de.NAME From dbo.DEPLOYMENT_ENVIRONMENT as de
Inner join dbo.DEPLOYMENT_RESULT as dr
on dr.ENVIRONMENT_ID = de.ENVIRONMENT_ID
Where @filecontent = de.ENVIRONMENT_ID) a"
queryout "' + @OutputFilePath + '\results4.csv" -T -c -t -S DEV-BUILD01\SQLSERVER'''
Exec(@ExportSQL)
Run Code Online (Sandbox Code Playgroud)
我有一些存储过程来修改 .csv 文件,我发现使用 bcp 是我在 TSQL 脚本中执行此操作的最佳方法。语法是这样的(取自我的一个现场示例;
DECLARE @OutputFilePath nvarchar(max); SET @OutputFilePath = 'C:\Users\VirtualMachine1\Desktop\MasterFullOutput\Phase03'
DECLARE @ExportSQL nvarchar(max); SET @ExportSQL = N'EXEC master.dbo.xp_cmdshell ''bcp "SELECT TextData FROM DataConversionDB.dbo.DataScripts ORDER BY RowNumber" queryout "' + @OutputFilePath + '\OutputData.csv" -T -c -t -S WIN-SIITTJOB7OV'''
EXEC(@ExportSQL)
Run Code Online (Sandbox Code Playgroud)
您必须确保您的 SQL Server 服务登录名可以访问您要输出到的文件路径(不是您自己的权限,而是 SQL Server NT 服务的权限)。
这里有一些关于 bcp 命令的额外阅读;
https://msdn.microsoft.com/en-GB/library/aa337544.aspx
https://www.simple-talk.com/sql/database-administration/working-with-the-bcp-command-line-utility/
为了缩小范围,看看这个例子会发生什么;
DECLARE @ExportSQL nvarchar(max);
SET @ExportSQL = 'EXEC ..xp_cmdshell ''bcp "SELECT TOP 1 FROM sys.objects " queryout "C:\DeploymentPipelines\results4.csv" -T -c -t -S DEV-BUILD01\SQLSERVER'''
Exec(@ExportSQL)
Run Code Online (Sandbox Code Playgroud)