我一直在使用我的新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
。
答案 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>