2014-02-03 3 views
3

DBCC не доступен в Sql Azure, поэтому в основном мы не можем выполнить DBCC действия. Итак, как мы делаем сброс для идентификации в Sql Azure.Sql Azure, усекать и повторять все таблицы

Я написал это, чтобы усечь все записи и перевести таблицы в 1 и, очевидно, это не сработает, потому что DBCC не разрешено.

EXEC sp_MSForEachTable ‘ALTER TABLE ? NOCHECK CONSTRAINT ALL’ 
EXEC sp_MSForEachTable ‘DELETE FROM ?’ 
EXEC sp_MSForEachTable ‘ALTER TABLE ? CHECK CONSTRAINT ALL’ 
DBCC checkident (?, RESEED, 1) ?? 
GO 

Так как я делаю Reseed с этим скриптом.

+0

sp_msforeachtable также не поддерживается в SQL Azure. Вот альтернатива: https://gist.github.com/metaskills/893599 – Jowen

ответ

2

Вот что я сделал:

declare @dropConstraintsSql nvarchar(max); 
declare @enableConstraintsSql nvarchar(max); 
declare @deleteSql nvarchar(max); 

-- create a string that contains all sql statements to drop contstraints 
-- the tables are selected by matching their schema_id and type ('U' is table) 

SELECT @dropConstraintsSql = COALESCE(@dropConstraintsSql + ';','') + 'ALTER TABLE [' + name + '] NOCHECK CONSTRAINT all' 
FROM sys.all_objects 
WHERE type='U' and schema_id=1 
-- AND... other conditions to match your tables 


-- create a string that contains all your DELETE statements... 

SELECT @deleteSql = COALESCE(@deleteSql + ';','') + 'DELETE FROM [' + name + '] WHERE ...' 
FROM sys.all_objects 
WHERE type='U' and schema_id=1 
-- AND ... other conditions to match your tables 

-- create a string that contains all sql statements to reenable contstraints  

SELECT @enableConstraintsSql = COALESCE(@enableConstraintsSql + ';','') + 'ALTER TABLE [' + name + '] WITH CHECK CHECK CONSTRAINT all' 
FROM sys.all_objects 
WHERE type='U' and schema_id=1 
-- AND ... other conditions to match your tables 

-- in order to check if the sqls are correct you can ... 
-- print @dropConstraintsSql 
-- print @deleteSql 
-- print @enableConstraintsSql 


-- execute the sql statements in a transaction 

begin tran 

exec sp_executesql @dropConstraintsSql 
exec sp_executesql @deleteSql 
exec sp_executesql @enableConstraintsSql 

-- commit if everything is fine 
rollback 
Смежные вопросы