Sql-Server

如何在 SQLcmd 視窗中列印結果

  • December 3, 2019

我不想在 SQLcmd 視窗中顯示這些查詢的結果:

SELECT SYSDATETIME() AS "date";

PRINT 'EXTRAÍDO POR:'
SELECT SUSER_NAME() AS "Owner"

PRINT 'PASSWORD SETTINGS';
exec xp_loginconfig;

PRINT 'PASSWORD SETTINGS';
select * from sys.sql_logins;

並在 SQLcmd 中使用此命令:

sqlcmd -S myServer -i inputpath -s, -o outputPath(like C:\log.xls) -e

因此 sqlcmd 輸出文件並且在 sqlcmd 螢幕中不顯示任何內容。如何在 sqlcmd 螢幕中列印這些“列印”命令?(命令提示符)。

當我在 SSMS 上執行它時效果很好,例如:

(受影響的 1 行)所有者:

(受影響的 1 行)密碼設置

(受影響的 8 行)密碼設置

我想在提示命令中顯示這個,就像在 SSMS 中一樣。

謝謝!

您在命令視窗中看不到任何內容,因為您正在告訴SQLCMD.EXE由於使用開關而將所有輸出定向到文件。-o如果您希望結果進入文件,消息進入螢幕(而不是進入文件),則不能使用該-o開關。

相反,您需要手動將輸出(即“stdout”)重定向到使用>命令行的文件,如> log.xls. 但是,預設情況下,PRINT消息也會發送到“stdout”,因此您需要使用-r1開關將它們發送到“stderr”(以便顯示它們而不是進入文件)。這會讓你有(寫到C:**不是一個好習慣,所以也許創建一個TEMP**目錄/文件夾,或類似的東西):

SQLCMD -S (local) -i script.sql -s, -e -r1 > C:\TEMP\log.xls

然後,您將在命令視窗中看到以下內容:

EXTRAÍDO POR:

密碼設置

密碼設置

“(受影響的 18 行)”仍將在輸出文件中。如果您希望在視窗中而不是在文件中,那麼您需要:

  1. 添加SET NOCOUNT ON;到SQL 腳本的頂部
  2. 在每個 T-SQL 查詢之後添加PRINT '(' + CONVERT(VARCHAR(10), @@ROWCOUNT) + ' rows affected)';(即在每個SELECTEXEC在此腳本中)。

完成這兩個步驟後,您將在命令視窗中看到以下內容:

(1 行受影響)

EXTRAÍDO POR:

(1 行受影響)

密碼設置

(8 行受影響)

密碼設置

(18 行受影響)

還:

  1. 如果將script.sql-e中的原始 SQL 查詢發送到輸出文件的頂部會導致在 Excel 中打開它時出現問題(我假設您希望在**.xls**文件副檔名的情況下這樣做),您可能需要刪除該開關。
  2. 根據您的作業系統區域設置和與登錄預設數據庫的預設排序規則關聯的程式碼頁,您可能需要更改命令視窗的目前程式碼頁,以便Í正確顯示字元。

含義:我在美國,所以我的命令視窗的預設程式碼頁是 437,但我的登錄預設數據庫的Latin1_General_*排序規則是使用程式碼頁 1252 的排序規則。在 SSMS 中,PRINT 'EXTRAÍDO POR:'顯示為:

提取者:

在“消息”選項卡中。但是,在我的命令提示符視窗中,我看到:

提取者:

命令提示符顯示“I”而不是“Í”。為了解決這個問題,我需要在執行SQLCMD之前在命令提示符視窗中執行以下命令:

chcp 1252

PS 不,GO此腳本中不需要。

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