所以我有这个通过 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 基本上是它们的任意组合,但到目前为止还没有运气改变这个问题。这里有什么提示吗?
当一个 CSV 文件在通过批处理文件或 SSMS 作业创建后被“另一个用户”锁定时,这意味着另一个进程或用户锁定了该文件,阻止其他进程访问它。 要解决此问题,您可以尝试以下步骤:
好吧,所以我现在的临时修复是在其中一项任务中将 sqlcmd 直接移动到 SQL Server 代理,而不是调用批处理文件。这是一位同事推荐的,它成功了。我想知道是否有其他人成功完成了这样的任务等,以及他们使用了哪些步骤。只是为了以后的工作。 :)