CSV 文件在通过批处理文件/SSMS 作业创建后被“另一个用户”锁定

问题描述 投票:0回答:2

所以我有这个通过 SSMS SQL Server Agent 作为作业运行的批处理文件。

@echo off
title This will be the batch script to create our 3 .csv files for Scott.

sqlcmd /S MYSERVER /d QWI /E /Q "SELECT [geography], current_year, [quarter], industry AS sector, ethnicity, [A0] AS Race0, [A1] AS Race1, [A2] AS Race2, [A3] AS Race3, [A4] AS Race4, [A5] AS Race5, [A7] AS Race7 FROM (SELECT [geography], race, current_year, [quarter], industry, ethnicity, HirAS FROM QWI.dbo.RaceEthnicity) p  PIVOT(SUM(HirAS)  FOR race IN( [A0], [A1], [A2], [A3], [A4], [A5], [A7] )) AS pvt WHERE [geography] = '53077' AND current_year = '1990' AND [quarter] = '3' ORDER BY current_year, pvt.geography, sector, ethnicity" /s"," /o "RaceEthnicityResults.csv"

基本上,我在批处理文件中使用 sqlcmd 创建一个包含查询的 csv 文件。一切正常运行,文件创建时包含正确的信息。问题是当我访问该文件时,它只能用作“只读”文件,因为它正被“另一个用户”使用。我知道这可能是因为进程没有被正确关闭/终止,但是 SQL Server 代理显示成功并且作业确实完成了。我正在以“sa”的身份运行该过程。

我尝试将所有内容添加到批处理文件的末尾, 出口 退出 /b /C 等待 暂停 调用 taskkill /f /im notepad.exe 退出/b 0 基本上是它们的任意组合,但到目前为止还没有运气改变这个问题。这里有什么提示吗?

sql-server batch-file ssms sql-server-agent
2个回答
0
投票

当一个 CSV 文件在通过批处理文件或 SSMS 作业创建后被“另一个用户”锁定时,这意味着另一个进程或用户锁定了该文件,阻止其他进程访问它。 要解决此问题,您可以尝试以下步骤:

  1. 检查是否有任何其他进程或用户打开了该文件。您可以使用 Process Explorer 或 Resource Monitor 等工具来确定哪个进程正在锁定文件。
  2. 如果文件被进程锁定,您可以尝试终止进程或等待它释放对文件的锁定。
  3. 如果文件被其他用户锁定,您可以尝试联系用户,让他们解除对文件的锁定。
  4. 如果以上步骤都不行,您可以尝试重命名文件或将其移动到不同的位置以解除锁定。
  5. 如果您经常遇到这个问题,您可以修改批处理文件或 SSMS 作业以使用不同的文件名或位置以避免文件锁定。 请记住在尝试移动或重命名文件之前保存并关闭任何文件,因为您可能会丢失任何未保存的更改。

0
投票

好吧,所以我现在的临时修复是在其中一项任务中将 sqlcmd 直接移动到 SQL Server 代理,而不是调用批处理文件。这是一位同事推荐的,它成功了。我想知道是否有其他人成功完成了这样的任务等,以及他们使用了哪些步骤。只是为了以后的工作。 :)

© www.soinside.com 2019 - 2024. All rights reserved.