我正在尝试创建一个Integration Service项目,该项目将使用一组现有(旧版)数据库来创建新数据库。由于我是SSIS菜鸟,我的进步相当增量,在整个目标数据库上添加截断将帮助我更轻松地测试它。
这样的事情可能吗?
答案 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视图不满意,那么您可以自己定义表列表。
答案 1 :(得分:0)
答案 2 :(得分:0)
为什么要使用这么复杂的SQL语句?为什么不将Execute SQL Task与值为(DELETE FROM tablename WHERE ControlKey =?)的表达式变量一起使用
答案 3 :(得分:0)
这里有一个Doctrine 1.2代码清空所有表,忽略了innoDB外来的KEYS。我用它来引导单元测试
/**
* 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);
}