2009-12-15 112 views
1

我正在嘗試創建一個集成服務項目,該項目將使用一組現有(遺留)數據庫來創建新數據庫。由於我是SSIS noob,所以我的進度是相當漸進的,並且在整個目標數據庫中添加截斷將幫助我更輕鬆地進行測試。截斷表?

這樣的事情可能嗎?

+0

您是否試圖截斷(擦除數據)或刪除表並重新創建? –

+0

擦除數據。我只是在忙於此事,所以我希望每個人都試着從一張乾淨的紙上開始。 –

回答

1

此SQL語句會爲你做它。如果您希望它成爲IS項目的一部分,那麼將其作爲SQL腳本任務的SQL。

declare @object_id int 
declare @str varchar(255) 

select @object_id = min(object_id) 
from sys.tables 
where name <> 'sysdtslog90' 

while @object_id is not null 
begin 
    select @str = 'truncate table ' + name 
    from sys.tables 
    where object_id = @object_id 

    print @str 
    exec (@str) 

    select @object_id = min(object_id) 
    from sys.tables 
    where object_id > @object_id 
    and name <> 'sysdtslog90' 
end 

如果你對使用sys.tables視圖不滿意,那麼你總是可以自己定義表列表。

0

爲什麼要使用這樣複雜的SQL語句?爲什麼不直接使用表達式變量的值爲(DELETE FROM tablename WHERE Con​​trolKey =?)的執行SQL任務

+0

因爲那時我需要一個接一個地瀏覽我的所有桌子。我需要的腳本是一些通用腳本,用於處理整個數據庫中的任何表 –

0

這裏是一個Doctrine 1.2代碼,用於清空所有表,忽略innoDB外鍵。我正在使用它來引導單元測試

/** 
* Empty all tables, ignoring innoDB foreign keys 
*/ 
function emptyTables() 
{ 
    $conn = Doctrine_Manager::getInstance()->getCurrentConnection(); 
    $stmt = $conn->prepare('SHOW TABLES'); 
    $stmt->execute(); 

    $queries = "SET FOREIGN_KEY_CHECKS = 0;"; 
    foreach($stmt->fetchAll() as $table) { 
     $queries .= "TRUNCATE `".array_shift($table)."`;\n"; 
    } 
    $queries .= "SET FOREIGN_KEY_CHECKS = 1;"; 

    $conn->getDbh()->query($queries); 
}