It is safe to use Delete
statement without where
clause instead of truncate
which may fail if you have referential constraints
. Try this query
Declare @sql Nvarchar(max)=''
SELECT @sql += ' delete from ' + s.NAME + '.' + t.NAME
+' Go DBCC CHECKIDENT ('''+s.NAME + '''.''' + t.NAME+''', RESEED, 0) GO '
FROM sys.tables t
JOIN sys.schemas s
ON t.[schema_id] = s.[schema_id]
WHERE t.type = 'U'
and s.name = 'schema_name' -- your schema name
Exec sp_executesql @sql
Cursor Version:
DECLARE @s_name VARCHAR(128)
DECLARE @t_name VARCHAR(128)
DECLARE db_cursor CURSOR FOR
SELECT s.NAME as Schema_Nam , t.NAME as Table_Name
FROM sys.tables t
JOIN sys.schemas s
ON t.[schema_id] = s.[schema_id]
WHERE t.type = 'U'
and s.name = 'schema_name'
OPEN db_cursor
FETCH NEXT FROM db_cursor INTO @s_name,@t_name
WHILE @@FETCH_STATUS = 0
BEGIN
set @sql += ' delete from ' + s.NAME + '.' + t.NAME
+' Go DBCC CHECKIDENT ('''+s.NAME + '''.''' + t.NAME+''', RESEED, 0) GO '
FETCH NEXT FROM db_cursor INTO @s_name,@t_name
END
CLOSE db_cursor
DEALLOCATE db_cursor
Exec sp_executesql @sql