我正在尝试从 Windows 批处理文件 (.bat) 中查询本地 SQL DB,该文件将通过多个调用 UCID 进行迭代,我需要结果采用我可以在批处理文件中以编程方式使用的形式,而不是什么我一直得到如下内容:
没有返回匹配项:
UNIQUECALLID,TIMESTAMP1
------------,----------
(0 rows affected)
... 下面列出的代码示例总是返回
1
无论是否找到匹配项或者结果是否与上面列出的结果类似。任何匹配项都会返回相同格式的输出,但会包含匹配的记录,并且批处理脚本会返回一个 ``".
我不需要比赛中的数据,我只需要我的批处理脚本能够可靠地辨别是否有比赛,这样我就可以使用该结果形成该脚本的输出,该输出将列出我的UCID 一个接一个地指示是否找到它们。
这是我最近的尝试:
我怎样才能让 SQLcmd.exe 给我一个布尔值输出:如果它找到与查询匹配的任何内容,则为“1”;如果没有找到任何匹配项,则为“0”?
@echo off
setlocal
REM Define the search string
set "searchString=CALLID"
REM Define the SQL query
set sqlQuery="SELECT UNIQUECALLID, TIMESTAMP1 FROM INCIDENT WHERE UNIQUECALLID = '911103-03444-20230227055957'"
REM Execute the SQL query and redirect output to a temporary file
SQLCMD.exe -S Localhost -d myDB -U myuser -P mypasswd -s "," -W -Q "%sqlQuery%" > temp.txt
REM Search for the string in the temporary file
FINDSTR /C:"%searchString%" temp.txt >NUL
if %errorlevel% equ 0 (
set "result=1"
) else (
set "result=0"
)
REM Cleanup
del temp.txt
REM Return the result
echo %result%
endlocal
为了清楚起见,我在这个例子中省略了通过输入列表的迭代。我对那部分没有任何问题。无论是否找到匹配项,此示例的结果都会返回
1
。
我不是程序员或 SQL DB 专家,只是迫切需要从电话数据库中生成包含数千个呼叫 ID 的列表,我在其中指示是否找到 UCID 或未找到。我在正确的轨道上吗?必须有更好的方法来做到这一点。任何建议将不胜感激。
额外尝试:
我发现,如果我这样查询已知的匹配项,我确实会得到可靠的结果,但输出仍然是一团糟:
sqlcmd -S localhost -d myDB -Q "IF EXISTS (SELECT 1 FROM INCIDENT WHERE UNIQUECALLID = '911103-03444-20230227055957') SELECT 1 ELSE SELECT 0"
输出为:
-----------
1
(1 rows affected)
...对于不匹配:
sqlcmd -S localhost -d myDB -Q "IF EXISTS (SELECT 1 FROM INCIDENT WHERE UNIQUECALLID = '911103-03444-20230_no_match_5957') SELECT 1 ELSE SELECT 0"
-----------
0
(1 rows affected)
如果 SQLCMD 可以简单地返回错误级别
1
或 0
那会很棒。