Sql-Server-2005

保存 DBCC ShrinkFile 的結果

  • January 25, 2017

當我們執行以下命令時:

DBCC SHRINKFILE('MyDB_log', 1)

我們在 SSMS 中得到以下結果:

DBID | Field | CurrentSize | MinimumSize | UsedPages | Estimated Pages
-----|-------|-------------|-------------|-----------|----------------
11  |   2   |    128      |   128       |  128      |     128

問題:

我們如何在不使用 SSMS 輸出視窗的情況下創建將這些結果輸出到文本文件的查詢。

我試過這個:

CREATE TABLE #x
(
   [DBID] int,
   FileID int,
   CurrentSize int,
   MinimumSize int,
   UsedPages int,
   EstimatedPages int
)
INSERT #x 
 EXEC('DBCC SHRINKFILE(''MyDB_log'', 1)')

SELECT * 
 FROM #x

DROP TABLE #x

但我收到以下錯誤:

Msg 8920, Level 16, State 2, Line 1
Cannot perform a shrinkfile operation inside a user transaction. Terminate the transaction and reissue the statement.

我還嘗試了以下方法:

DECLARE @Statement AS VARCHAR(2000); 
SET @Statement = 'bcp "DBCC SHRINKFILE(''MyDB_log'', 1)" queryout C:\Test.txt -c -UDBAdmin -P1234 -S192.168.123.123';

exec xp_cmdshell @Statement

我得到:

Error = [Microsoft][SQL Native Client]BCP host-files must contain at least one column

我看到的最簡單的方法是使用 sqlcmd 的批處理文件:

sqlcmd -S .\SQL2008R2 -E -Q "dbcc loginfo" >> log.txt

重定向運算符在文件末尾附加數據。

-Q 參數用於立即關閉 sqlcmd 會話。

如果您正在查看一次性查詢,則可以通過按 Ctrl+Shift+F 將查詢結果輸出到文件。

如果您正在尋找可以自動化的東西,您可以將查詢包裝在 Powershell 或其他腳本語言中並讓其寫入文件。

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