Sql server SSIS:通过SQL Server代理作业访问Sharepoint UNC
我有一个SSIS包连接,该连接通过UNC路径连接到Sharepoint站点,如下所示:Sql server SSIS:通过SQL Server代理作业访问Sharepoint UNC,sql-server,sharepoint,ssis,unc,sql-server-agent,Sql Server,Sharepoint,Ssis,Unc,Sql Server Agent,我有一个SSIS包连接,该连接通过UNC路径连接到Sharepoint站点,如下所示: \\[Site URL]\DavWWWRoot\sites\DTS_BURM\DARBenchmarks\FileName.csv 我的包读取文件并将其导入SQL DB。此过程在VS中运行良好。但是,如果我想在作业中从SQL Server代理运行包,它将向我提供以下错误: 导入原始数据:错误:无法打开数据文件“[Site URL]\davwwroot\sites\DTS\u BURM\DARBenchmar
\\[Site URL]\DavWWWRoot\sites\DTS_BURM\DARBenchmarks\FileName.csv
我的包读取文件并将其导入SQL DB。此过程在VS中运行良好。但是,如果我想在作业中从SQL Server代理运行包,它将向我提供以下错误:
导入原始数据:错误:无法打开数据文件“[Site URL]\davwwroot\sites\DTS\u BURM\DARBenchmarks\FileName.csv”
起初,我觉得这很明显。运行SQL作业的帐户无权访问SharePoint。因此,我在Credentials文件夹中添加了一个服务帐户,然后使用这些凭据为SQL Server代理创建了一个代理。此外,我还将该服务帐户作为所有者添加到SharePoint中,使其具有读/写权限
即使在所有这些之后,我仍然收到一个错误,声明它“无法打开数据文件”。我不确定我还能做些什么,如果有人有建议,我将不胜感激。正如我在评论中提到的,我们在将SharePoint UNC与SSIS部署到服务器时没有多少运气或稳定性。在执行SSIS步骤之前,我们在代理作业步骤中使用PowerShell脚本下载本地文件 这仅适用于SQL Server 2014或更高版本,因为代理使用的PowerShell版本以及需要安装SharePoint模块
$SharepointBaseURL = "https://yoursharepoint.com/sites/sitename/" #base URL of your site
$SharepointDocumentFolder = "Shared Documents/path to folder" #path to the folder where the files are located
$LocalShare = "\\server\localshare" #where you download local, sql proxy account needs access
$un = "YourAccount@domain.com"
$pw = "Password"
Set-Location "c:\" #we had to have this when running in agent job
try
{
$sp = $pw | ConvertTo-SecureString -AsPlainText -Force
$plainCred = New-Object system.management.automation.pscredential -ArgumentList $un, $sp
Connect-PnPOnline -Url $SharepointBaseURL -Credentials $plainCred -ErrorAction Stop
$SharePointFileList = Get-PnPFolderItem -FolderSiteRelativeUrl $SharepointDocumentFolder -ItemType File #gets a list of all files in the sharepoint directory
foreach ($File in $SharePointFileList)
{
Get-PnPFile -Url $File.ServerRelativeUrl -Path $LocalShare -Filename $File.Name -AsFile -ErrorAction Stop #Add "-Force" parameter if you want to override if the file already exists
}
}
Catch
{
Throw $_.Exception.Message #any errors/exceptions this bubbles it out into job history
}
然后将SSI配置为访问本地文件。您可以从SQL Server计算机打开该路径吗?SharePoint不是文件服务器。它公开了一个WebDAV端点,Windows可以将该端点视为“网络共享”,只要提供
Web文件夹
服务即可running@PanagiotisKanavos不幸的是,我不允许远程进入SQL Server机器进行测试。那么,你怎么知道WebDAV在该服务器上可以工作呢?@PanagiotisKanavos我不知道,为了进一步说明这一点,如果我作为服务帐户登录到SSMS并运行“EXEC master.dbo.xp_fileexist[PATH]”,它将显示该帐户的目录不存在。你知道解决办法吗?我愿意使用其他方法来实现我的目标。如果没有作为您的服务帐户登录服务器的权限,您将无法使用此服务。即使你可以,它也不稳定。您必须在服务器上安装“WebDav重定向器”,将sharepoint站点添加到IE中的受信任列表,登录sharepoint并勾选“记住我”框,等等。。。但在某个时候,sharepoint希望您重新进行身份验证。花了几个星期的时间整理。在运行SSIS之前,我们只需在代理作业步骤中使用powershell脚本下载本地文件。这必须是sql2014或更高版本,因为sql代理使用的是哪个版本的powershell。