Sql-Server-2016

:!!echo 命令在 sqlcmd 中不起作用

  • April 28, 2020

我有一個從批處理文件執行的 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) o​​n Windows Server 2016 Datacenter 10.0 (Build 14393: )(管理程序)

引用自:https://dba.stackexchange.com/questions/260842