我对SQL非常陌生,所以请告诉我,如果有什么地方我可以自己更好地回答这个问题。
我有一个包含数百个表的数据库,这些表的填充程度不同。我需要截断几乎所有这些测试,同时保留一些数据用于配置。
我已经看到很多关于截断所有的帖子(即使是外键,我也有),但是我希望有一些jiggery pokery我可以做一些'if'类型结构。最好的解决方案是复制掉那几张表,做this,然后将数据复制回来吗?
答案 0 :(得分:1)
正如您所提到的,您是SQL的新手,这里有一个非常基本的脚本来生成TRUNCATE查询:
DECLARE @ExcludedTables TABLE (TableName NVARCHAR(MAX))
INSERT INTO @ExcludedTables VALUES ('Table1')
INSERT INTO @ExcludedTables VALUES ('Table2')
INSERT INTO @ExcludedTables VALUES ('Table3')
SELECT 'TRUNCATE TABLE [' + S.[name] + '].[' + T.[name] + ']', T.*
FROM sys.tables AS T
INNER JOIN sys.schemas AS S ON T.schema_id = S.schema_id
WHERE T.[name] NOT IN (SELECT TableName FROM @ExcludedTables)
我创建了一个表变量,您可以在其中插入要排除的表名。您也可以使用临时表,甚至普通表来实现此目的。
答案 1 :(得分:0)
限制某些表格并不困难。您可以创建一个临时表或表变量及其名称。然后,您可以创建数据库中所有表名的列表,其名称不在为您的管理员创建的结构中。
假设数据库具有外键,您必须以正确的顺序截断表或禁用/删除约束。这比上面更令人头疼,但可能还有例行程序。
具体细节需要知道你正在使用什么数据库系统(sql server,my sql,oracle等)