0
我有一個表被截斷,每天加載的數據問題是截斷表需要一段時間,用戶注意到這一點。我想知道的是,有沒有辦法讓兩個相同的表格和截斷一個然後加載新的數據,然後讓用戶用戶那個新表,並只是在兩個表之間切換。SQL Server表交換
我有一個表被截斷,每天加載的數據問題是截斷表需要一段時間,用戶注意到這一點。我想知道的是,有沒有辦法讓兩個相同的表格和截斷一個然後加載新的數據,然後讓用戶用戶那個新表,並只是在兩個表之間切換。SQL Server表交換
如果您正在清除舊錶以及填充新表,可以使用OUTPUT子句。注意日誌增長的潛力,如果這可能是一個問題,考慮循環/批處理方法。
DELETE
OldDatabase.dbo.MyTable
OUTPUT
DELETED.col1
, DELETED.col2
, DELETED.col3
INTO
NewDatabase.dbo.MyTable
或者你可以使用BCP這是一個方便的選擇要注意。請注意,這是使用SQLCMD語法。
:setvar SourceServer OldServer
:setvar SourceDatabase OldDatabase
:setvar DestinationServer NewServer
:setvar DestinationDatabase NewDatabase
:setvar BCPFilePath "C:\"
!!bcp "$(SourceDatabase).dbo.MyTable" FORMAT nul -S "$(SourceServer)" -T -n -q -f "$(BCPFilePath)MyTable.fmt"
!!bcp "SELECT * FROM $(SourceDatabase).dbo.MyTable WHERE col1=x AND col2=y" queryout "$(BCPFilePath)MyTable.dat" -S "$(SourceServer)" -T -q -f "$(BCPFilePath)MyTable.fmt" -> "$(BCPFilePath)MyTable.txt"
!!bcp "$(DestinationDatabase).dbo.MyTable" in $(BCPFilePath)MyTable.dat -S $(DestinationServer) -T -E -q -b 2500 -h "TABLOCK" -f $(BCPFilePath)MyTable.fmt
在這裏有很多超級聰明和有經驗的人。如果您詳細介紹了存儲的內容,存儲的原因以及截斷的原因,您將獲得更多有用的響應。還包括任何語言/軟件/版本信息。 – Kieveli
雖然'TRUNCATE'很快,它將需要架構修改鎖;它將被併發活動阻止,反之亦然。 'SWITCH'也是如此,它可以用作交換設計的一部分。 「SWITCH」的優點是負載可以單獨發生。 –
也許你可以用同義詞做到這一點。讓用戶只知道同義詞並將其從一個表切換到另一個表 – Turo