Sql-Server
多命令 SQLCMD 模式腳本
我正在嘗試為 sqlcmd 模式下的表列表執行 sql 過程,以將所有輸出重定向到每個表的一個文件中。
不幸的是,只有所有命令的重定向輸出的最後一個文件才能獲得內容。
例如我執行以下命令:
:OUT c:\test\tab0.sql EXEC [dbo].[sp_generate_merge] @schema = 'dbo', @table_name ='tab0', @include_timestamp = 0, @ommit_images = 1, @CreateProcedure = 1 :OUT c:\test\tab1.sql EXEC [dbo].[sp_generate_merge] @schema = 'dbo', @table_name ='tab1' , @include_timestamp = 0, @ommit_images = 1, @CreateProcedure = 1
兩個文件都已創建,但只有最後一個文件獲取所有內容。
任何提示我可以如何更改它以便在每個命令的一個文件中獲取結果?
GO
在兩個部分之間放置一個(即批次分隔符)。每個批次都處理 SQLCMD 命令和變數。我對此進行了測試並且沒有GO
(即它在問題中的設置方式),我得到了與您看到的相同的行為:第一個文件存在但為空,而第二個文件具有兩個儲存過程執行的結果。這是由於兩個:out
命令在同一個批次中,因此第二個:out
替換了第一個。但是,如果我
GO
在它們之間放置一個,每個輸出文件都只有一次執行的結果::OUT c:\test\tab0.sql EXEC [dbo].[sp_generate_merge] @schema = 'dbo', @table_name ='tab0', @include_timestamp = 0, @ommit_images = 1, @CreateProcedure = 1; GO :OUT c:\test\tab1.sql EXEC [dbo].[sp_generate_merge] @schema = 'dbo', @table_name ='tab1' , @include_timestamp = 0, @ommit_images = 1, @CreateProcedure = 1;
PS 與此問題無關,您不應在儲存過程名稱前加上
sp_
它,因為它是為 SQL Server 特殊用途而保留的,並master
首先搜尋數據庫,這可能會導致性能問題。