我最初创建了一组脚本来使用 SQLCMD 从动态查询系统中提取结果到 CSV。然而,由于数据集中的大文本字段包含大量格式代码,CSV 文件变得笨拙。然后我切换到使用 SQLPS 或 PowerShell,它们在格式化输出文件方面做得很好。不幸的是,从 SSMS 手动运行 T-SQL 文件时,我无法保存提取的 CSV 文件。我可以将相同的输出代码粘贴到 SQLPS 中,并且使用 PowerShell.exe 或 SQLPS.exe 可以正常工作。
我检查了提取文件夹的文件权限,尝试了 SQLPS 和 PowerShell 的不同选项,并查看了进程监视器中的执行,但我不知道为什么这不起作用。
SET @Cmd = 'sqlps
$FromDate = "' + @FromDate + '";
$ToDate = "' + @ToDate + '";
$IncidentTypeName = "' + @IncidentTypeName + '";
$DateField = "' + @DateField + '";
$QueryType = "' + @QueryType + '";
$PersonTypeID = "' + @PersonTypeID + '";
$var = "FromDate=$FromDate", "ToDate=$ToDate", "IncidentTypeName=$IncidentTypeName", "DateField=$DateField", "QueryType=$QueryType", "PersonTypeID=$PersonTypeID";
invoke-sqlcmd -ServerInstance ' +@Server+ ' -Database ' +@Database+ ' -Username '+@Login+' -Password '+@Password + ' -QueryTimeout 0 ' +
' -InputFile "'+@SqlScriptFolder+@InputFileType+'" -Variable $var | export-csv -Delimiter "," -NoTypeInformation -Path "'+@ExtractFolder+@OutputFile+'.csv"'
print @Cmd
EXEC master..xp_cmdshell @Cmd
我的要求是提取一个标准的 CSV 文件,不幸的是,我试图利用我在项目早期使用 SQLCMD 时拼凑的大量 T-SQL 代码。它还需要是一个自动化的过程,这就是我尝试利用 PowerShell 或 SQLPS 的原因。我在运行 Windows 10 的开发机器上使用 SQL Server 2019。
关于这个有什么想法吗?