簡體   English   中英

使用 xp_cmdshell 從 T-SQL 腳本執行 SQLPS 或 PowerShell 時遇到問題

[英]Trouble executing SQLPS or PowerShell from T-SQL script using xp_cmdshell

我最初創建了一組腳本來使用 SQLCMD 從動態查詢系統中提取結果到 CSV。 然而,由於數據集中的大文本字段包含大量格式代碼,CSV 文件變得笨拙。 然后我切換到使用 SQLPS 或 PowerShell,它在格式化 output 文件方面做得很好。 不幸的是,當從 SSMS 手動運行 T-SQL 文件時,我無法獲取要保存的提取 CSV 文件。 我可以將相同的 output 代碼粘貼到 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。

關於這個有什么想法嗎?

好吧,在對我的瘋狂過程進行了大量研究之后,我絕對應該將其重寫為 PowerShell 腳本(而不是使用 xp_cmdshell),我找到了解決方案,即

  1. \ (反斜杠)轉義" (雙引號)
  2. 使用SET @Cmd = REPLACE(REPLACE(@Cmd, NCHAR(13), N''), NCHAR(10), N' ');

調用-sqlcmd-doesnt-work-when-used-with-xp-cmdshell

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM