Sql server 如何验证文件是否可以在windows命令或powershell中访问?

Sql server 如何验证文件是否可以在windows命令或powershell中访问?,sql-server,windows,powershell,Sql Server,Windows,Powershell,我们在sFTP服务器上接收来自客户的XML文件。 然后一个SQL Server作业将它们拾取并加载到数据库中。 但是,它通常会失败,并出现一个错误,即文件不可访问。 这是因为它仍然被上传到我们的FTP服务器 不幸的是,上传完成后,客户无法重命名这些文件。我们有很多,这不是他们的首要任务 我想知道是否有任何方法可以识别文件是否已经加载。这是一个简单的函数,它基于这个问题的第二个答案,在jradich1234的评论中链接 函数已准备好文件{ param([parameter(Mandatory=$t

我们在sFTP服务器上接收来自客户的XML文件。 然后一个SQL Server作业将它们拾取并加载到数据库中。 但是,它通常会失败,并出现一个错误,即文件不可访问。 这是因为它仍然被上传到我们的FTP服务器

不幸的是,上传完成后,客户无法重命名这些文件。我们有很多,这不是他们的首要任务


我想知道是否有任何方法可以识别文件是否已经加载。

这是一个简单的函数,它基于这个问题的第二个答案,在jradich1234的评论中链接

函数已准备好文件{
param([parameter(Mandatory=$true)][string]$Path)
$File=New Object System.IO.FileInfo$Path
if((测试路径-路径$Path)-eq$false){
#文件不存在
返回$false
}
试一试{
#尝试以独占访问方式打开文件-[System.IO.FileShare]::无
$Stream=$File.Open([System.IO.FileMode]::Open,[System.IO.FileAccess]::ReadWrite,[System.IO.FileShare]::无)
如果($Stream){
$Stream.Close()
#文件准备好了。
返回$true
}
}
捕获{
#文件已锁定。
返回$false
}
}
用法:
文件准备好了吗“C:\temp\blah.txt”
真的

这是一个范围广泛的问题。没有简单的答案。您可以尝试这样做,因此响应决不是一个解决方案,而是一个解决方法:使用一个作业,首先将文件从上载目标文件夹移动到同一台计算机上的另一个文件夹。如果由于文件仍在上载而导致移动失败,则没有问题-您将在下次拾取该文件。实际的移动过程将只是调整文件系统中的指针,这将是快速的,因此当您的“将它们加载到数据库”作业(目标是“移动”作业目标文件夹)并导致其失败时,您的“移动”作业不太可能在文件上具有句柄。您可以在创建文件后使用。