I want to drop every user object in a SQL Server database but leave tables and its records intact. But I also want to drop its constraints. So I created this query to get drop declarations that I will paste into SMSS and execute after:
SELECT
'DROP ' +
CASE
WHEN [sys].[all_objects].type IN ('AF','FN','FS','FT','IF','TF') THEN 'FUNCTION '
WHEN [sys].[all_objects].type IN ('D','C','F','PK','UQ') THEN 'CONSTRAINT '
WHEN [sys].[all_objects].type IN ('IT','S','U') THEN 'TABLE '
WHEN [sys].[all_objects].type IN ('P','PC','RF','X') THEN 'PROCEDURE '
WHEN [sys].[all_objects].type IN ('TA','TR') THEN 'TRIGGER '
WHEN [sys].[all_objects].type = 'R' THEN 'RULE '
WHEN [sys].[all_objects].type = 'SN' THEN 'SYNONYM '
WHEN [sys].[all_objects].type = 'TT' THEN 'TYPE '
WHEN [sys].[all_objects].type = 'V' THEN 'VIEW '
END +
SCHEMA_NAME(sys.[all_objects].[schema_id]) + '.' + OBJECT_NAME(object_id) + '; ', OBJECT_NAME(object_id), [sys].[all_objects].[type_desc], [sys].[all_objects].[type], SCHEMA_NAME(sys.[all_objects].[schema_id])
FROM
sys.[all_objects] WITH (NOLOCK) -- WHERE (OBJECT_DEFINITION(object_id) LIKE '%' + @toDrop + '%') AND ([sys].[all_objects].[name] <> @toDrop);
WHERE
(SCHEMA_NAME(sys.[all_objects].[schema_id]) <> 'sys') AND
(SCHEMA_NAME(sys.[all_objects].[schema_id]) <> 'INFORMATION_SCHEMA') AND
([sys].[all_objects].[type_desc] <> 'USER_TABLE')
ORDER BY
[sys].[all_objects].[type_desc], SCHEMA_NAME(sys.[all_objects].[schema_id]), OBJECT_NAME(object_id)
Problem is, in constraint case I have to use ALTER TABLE x DROP CONSTRAINT y
So How do I do to erase all constraints easily?