如何从aspnet架构中截断所有表?

时间:2012-06-24 17:40:39

标签: asp.net-mvc tsql sql-server-2008-r2 database-schema

我一直在使用我的新MVC应用程序进行大量测试,现在我已准备好进入新的开发阶段。

我想TRUNCATE我所有的aspnet生成的表,但我似乎无法弄清楚删除所有外键约束的顺序。

TRUNCATE TABLE  aspnet_Profile 
TRUNCATE TABLE  aspnet_UsersInRoles 
TRUNCATE TABLE  aspnet_PersonalizationPerUser
TRUNCATE TABLE  aspnet_Membership
TRUNCATE TABLE  aspnet_users 

关于这一点,我在aspnet_Users上遇到了外键约束问题。看图,我似乎找不到更多会引用aspnet_users的东西。

我实际上从我在网上找到的删除声明中提取了这个订单,这对用户来说很好用。

DECLARE @UserId uniqueidentifier
SET @UserId = 'f0a05439-5218-4668-b11d-21a43385ea2f'

DELETE FROM aspnet_Profile WHERE UserID = @UserId
DELETE FROM aspnet_UsersInRoles WHERE UserID = @UserId
DELETE FROM aspnet_PersonalizationPerUser WHERE UserID = @UserId
DELETE FROM dbo.aspnet_Membership WHERE UserID = @UserId
DELETE FROM aspnet_users WHERE UserID = @UserId

其中,我可能会修改它以删除所有用户,但我更愿意TRUNCATE

1 个答案:

答案 0 :(得分:3)

你不能TRUNCATE一个带有外键引用的表。即使两个表都为空,即使您禁用了外键约束。

假设您有再次生成约束的脚本,您可以从引用表中删除外键,例如:

SELECT '
  ALTER TABLE ' + QUOTENAME(OBJECT_SCHEMA_NAME(fk.parent_object_id))
   + '.' + QUOTENAME(OBJECT_NAME(fk.parent_object_id))
   + ' DROP CONSTRAINT ' + QUOTENAME(fk.name) + ';'
FROM sys.foreign_keys AS fk
INNER JOIN sys.tables AS t
ON fk.referenced_object_id = t.[object_id]
WHERE t.name LIKE 'aspnet[_]%';

SELECT 'TRUNCATE TABLE ' + QUOTENAME(name) + ';'
  FROM sys.tables 
  WHERE name LIKE 'aspnet[_]%';

否则,如果你的目标是在1)重新启动任何DELETE值,那么仅使用TRUNCATE代替DBCC CHECKIDENT(然后IDENTITY可能更安全。< / p>