在SQl Server 2005中,我是否可以通过删除所有的表和存储过程、触发器、约束以及SQl语句中的所有依赖项来清理数据库?
要求理由:
我想有一个DB脚本清理现有的DB,这不是在使用,而不是创建新的,特别是当你必须把一个请求到你的DB管理员,并等待一段时间才能完成!
在SQl Server 2005中,我是否可以通过删除所有的表和存储过程、触发器、约束以及SQl语句中的所有依赖项来清理数据库?
要求理由:
我想有一个DB脚本清理现有的DB,这不是在使用,而不是创建新的,特别是当你必须把一个请求到你的DB管理员,并等待一段时间才能完成!
当前回答
为了补充Ivan的回答,我还需要删除所有用户定义的类型,所以我在脚本中添加了以下内容:
/* Drop all user-defined types */
DECLARE @name VARCHAR(128)
DECLARE @SQL VARCHAR(254)
SELECT @name = (select TOP 1 [name] from sys.types where is_user_defined = 1)
WHILE @name IS NOT NULL
BEGIN
SELECT @SQL = 'DROP TYPE [dbo].[' + RTRIM(@name) +']'
EXEC (@SQL)
PRINT 'Dropped Type: ' + @name
SELECT @name = (select TOP 1 [name] from sys.types where is_user_defined = 1)
END
GO
其他回答
最好的方法是“为Drop生成脚本”
选择数据库->右键单击->任务->生成脚本-将打开生成脚本的向导
在set Scripting选项中选择对象后,单击高级按钮
设置选项“Script to create”为true(想要创建) 设置选项“Script to Drop”为true(想要删除) ->选中复选框,选择要创建脚本的对象 ->选择写脚本的选项(文件,新建窗口,剪贴板) 默认情况下,它包含依赖对象。(并将首先删除约束) 执行脚本
这样我们就可以自定义脚本。
为了补充Ivan的回答,我还需要删除所有用户定义的类型,所以我在脚本中添加了以下内容:
/* Drop all user-defined types */
DECLARE @name VARCHAR(128)
DECLARE @SQL VARCHAR(254)
SELECT @name = (select TOP 1 [name] from sys.types where is_user_defined = 1)
WHILE @name IS NOT NULL
BEGIN
SELECT @SQL = 'DROP TYPE [dbo].[' + RTRIM(@name) +']'
EXEC (@SQL)
PRINT 'Dropped Type: ' + @name
SELECT @name = (select TOP 1 [name] from sys.types where is_user_defined = 1)
END
GO
没有一种单一的说法可以用来实现这一目标。
当然,您可以自己创建一个存储过程,用于执行这些不同的管理任务。
然后可以使用这条语句执行过程。
Exec sp_CleanDatabases @DatabaseName='DBname'
我会在两个语句中做到:DROP DATABASE ??
然后创建数据库??
除了@Ivan的回答外,还需要包括所有类型
/* Drop all Types */
DECLARE @name VARCHAR(128)
DECLARE @SQL VARCHAR(254)
SELECT @name = (SELECT TOP 1 [name] FROM sys.types where is_user_defined = 1 ORDER BY [name])
WHILE @name IS NOT NULL
BEGIN
SELECT @SQL = 'DROP TYPE [dbo].[' + RTRIM(@name) +']'
EXEC (@SQL)
PRINT 'Dropped Type: ' + @name
SELECT @name = (SELECT TOP 1 [name] FROM sys.types where is_user_defined = 1 AND [name] > @name ORDER BY [name])
END
GO