2014-02-28 57 views
0

我已經看過一些覆蓋這個主題的線程,但我無法將建議應用到我的stituation中。 我希望只有在file1存在並且來自sql命令的行計數返回的計數大於0時才能運行代碼塊。兩者都必須爲true才能運行代碼塊(:RUNCODE)。我已經設置了一些IF來處理這個,它跳轉到:RUNCODE或END。在批處理腳本中使用Sql變量

SET SqlServerName="SERVER1" 
    SET SqlDatabaseName="DB1" 
    SET SQL="SELECT COUNT(*) FROM TABLE1" 

    SQLCMD.exe -S%SqlServerName% -E -d%SqlDatabaseName% -Q%SQL% -h -1 -o RowCount.txt 

    SET /p RowCount= <RowCount.txt 
    DEL RowCount.txt 

    echo %RowCount% 


    IF EXIST "File1" IF %RowCount% GTR 0 
    (
      ECHO Running the position Loader for EFA... 
      GOTO RUNCODE 
    ) 


    IF NOT EXIST "File1" IF %RowCount% EQU 0 
    (    
      ECHO The Position File Does not Exist... 
      GOTO END 
    ) 

    IF EXIST "File1" IF %RowCount% EQU 0 
    (
      ECHO The File Does not Exist... 
      GOTO END 
    ) 

    IF NOT EXIST "File1" IF %RowCount% GTR 0 
    (
      ECHO The Position File Does not Exist... 
      GOTO END 
    ) 

    :RUNCODE 
    echo Running code block now now... 
    EXIT 

    :END 
    echo conditions not met... 
    EXIT 

上面的代碼給我行數= 0(與在變量白空間) 和如果出現條件完全跳過。

任何幫助將不勝感激。

輸出腳本示例。請注意,是在0前面的白色空間,而不是在(1行受影響)

 0 

(1行受影響)

+0

您可以發佈您的示例腳本輸出? –

+0

該文件只是三行。首先有行計數(0),結果前有空白。然後第二行有一個空行。最後'(1行受影響)'在第三行。 – ricky89

+0

你不需要修改你的'RowCount'變量。如果你遵循@ MattWilliamson的回答並修正你的'()',你的腳本應該可以正常工作。 –

回答

2

你的左括號前面的IF的需要是在同一行上。

IF EXIST "File1" IF %RowCount% GTR 0 (
     ECHO Running the position Loader for EFA... 
     GOTO RUNCODE 
) 


IF NOT EXIST "File1" IF %RowCount% EQU 0 (    
     ECHO The Position File Does not Exist... 
     GOTO END 
) 

IF EXIST "File1" IF %RowCount% EQU 0 (
     ECHO The File Does not Exist... 
     GOTO END 
) 

IF NOT EXIST "File1" IF %RowCount% GTR 0 (
     ECHO The Position File Does not Exist... 
     GOTO END 
) 

這裏是你如何能得到行數沒有空格

SET SQL="SET NOCOUNT on SELECT COUNT(*) FROM dbo.ACCT" 

SQLCMD.exe -S%SqlServerName% -E -d%SqlDatabaseName% -Q%SQL% -h -1 -o RowCount.txt 
for /f "delims=" %%a in ('type Rowcount.txt') do Call :Trim rcount %%a 
if /i exist RowCount.txt DEL /f /q RowCount.txt 
echo %rcount% 
exit /b 

:Trim <return> <string> 
for /f "tokens=1*" %%a in ("%*") do set "%%a=%%b" 
exit /b 
+0

嗨馬特,你能給我一個這個代碼正在做什麼的快速分解?目前這一切都超過了我。 – ricky89

+0

好吧,首先,我在SQL語句中添加了'set nocount on',因此它不會輸出'(1 row affected)'然後它使用for循環從文件中獲取rowcount值,然後使用':trim調用函數來刪除數字周圍的空白。 (for循環會發揮魔力) –