【发布时间】:2016-03-07 12:09:48
【问题描述】:
我有一个 PowerShell 脚本:
$date = (Get-Date -Format "yyyy_MM_dd_HH_mm_ss")
$file_name_headers= "path_string_"+$date+".csv"
$file_name_data = "path_string_"+$date+".csv"
bcp "SELECT COLUMN_NAME FROM db.INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'name1' AND TABLE_SCHEMA='dbo'" queryout $file_name_headers -S servername -t "," -T -c
bcp "db.dbo.name1" out $file_name_data -S servername -t "," -T -c
如果我在 PowerShell 终端中逐行执行它,它会做它应该做的事情。当我将其复制粘贴到 SQL Server 代理中的作业步骤并运行作业时,报告成功,但我看不到任何应使用脚本创建的文件。我已成功运行其他代理作业(执行存储过程)。
编辑:
权限问题。如果 SQL Server 而不是我使用 PowerShell 写入文件,则访问被拒绝。我可以使用它来写入具有足够权限的位置。它被认为是成功运行,仅仅是因为 bcp 错误不被视为脚本执行错误。作业历史包含有用的信息。
【问题讨论】:
-
你知道这里的任何路径都是 SQL Server 的本地路径吗?您是否在 SQL Server 上进行本地检查?
-
我想我不明白。该文件应该保存在网络驱动器上。我使用完整的 UNC 名称。
-
我还没有学习过 Powershell,但是如果您使用的是 UNC(我在您的代码中看不到),它应该可以工作或引发错误。您能否澄清一下:您是否在 SQL Server 上以交互方式运行此脚本?
-
“path_string”包含一个 UNC 名称。我已经使用 MS SQL Server Management Studio 打开了 PowerShell 终端,然后逐行执行脚本,将其复制并粘贴到终端中。有用。然后我将整个脚本复制并粘贴到代理作业定义中,即使报告成功,它也不会执行任何操作。
-
您正在 运行 SQL Server Management Studio(和 powershell)的计算机是您在 SQL Server 中连接的同一台计算机Management Studio 以访问 SQL 代理?我正在尝试确定作业是否实际在不同的服务器上运行。
标签: sql-server powershell sql-server-agent