:!!echo 命令在 sqlcmd 中不起作用
我有一個從批處理文件執行的 sql 腳本文件,應該執行一些 sql 腳本並將錯誤和輸出寫入文件。以下是腳本文件的範例:
:error ".\DataAndTableScripts\9.0.0\_RunOrderedScripts.err" :out ".\DataAndTableScripts\9.0.0\_RunOrderedScripts.out" :on error ignore go set nocount on; print 'Running .\DataAndTableScripts\9.0.0\OrderedFileList.txt' print 'Start time: ' + convert( varchar, getdate(), 121 ); GO :!!echo Table_auth.IdentityApplication.sql :error ".\DataAndTableScripts\9.0.0\Table_auth.IdentityApplication.err" :out ".\DataAndTableScripts\9.0.0\Table_auth.IdentityApplication.out" :r ".\DataAndTableScripts\9.0.0\Table_auth.IdentityApplication.sql" go
:!!echo Table_auth.IdentityApplication.sql 片段假設在命令提示符視窗中列印此文本。我最初在 SQL 2014 上有這個程式碼,但是當我升級到 SQL 2016 和命令行實用程序 13 時,這個回顯片段停止工作。看起來,即使我有 :on 錯誤忽略,當它到達 :!!echo 時,如果失敗並且腳本的其餘部分沒有執行。
任何人都知道問題可能是什麼?
SQLCMD
下一個版本不起作用:
- 版本 14.0.2027.2 NT(來自:微軟 SQL SERVER 2017 的命令行實用程序)
- 版本 15.0.1300.359 NT(來自:SQL Server 2019 (15.x))
此版本有效:
- 版本 11.0.2100.60 NT x64(來自:Microsoft SQL Server 2012 命令行實用程序)
(在我的電腦上的“C:\Program Files\Microsoft SQL Server\110\Tools\Binn\SQLCMD.EXE”中找到)
這是通過創建一個
sqlcmd.txt
包含 1 行 (:!! dir
) 的文件來測試的,並在執行時檢查此命令是否已執行sqlcmd -i sqlcmd.txt
。我認為可以在此處下載可用的版本 11 ,但不要問為什麼將其命名為“用於 SQL Server 的命令行實用程序 13”),並且從我在安裝過程中創建的日誌文件中安裝一個名為
110
…. 的文件夾。😕😵
我剛剛測試了 :!!echo 在這個版本上工作。
Microsoft SQL Server 2016 (SP2-GDR) (KB4293802) - 13.0.5081.1 (X64) 2018 年 7 月 20 日 22:12:40 版權所有 (c) Microsoft Corporation Enterprise Edition (64-bit) on Windows Server 2016 Datacenter 10.0 (Build 14393: )(管理程序)