Exclude certain schema along with unnamed constraints in SSDT
4
votes
2
answers
4746
views
### Task
1. Automate database deployment (SSDT/dacpac deployment with CI/CD)
2. The database is a 3rd party database
3. It also includes our own customized tables/SP/Fn/Views in separate schemas
4. Should exclude 3rd party objects while deploying the database project(dacpac) to Production
5. Thanks to Ed Elliott for the AgileSqlClub.DeploymentFilterContributor . Used the dll to filter out the schema successfully.
### Problem
1. The 3rd party schema objects(Tables) are defined with unnamed constraints(default / primary key) when creating the tables. Example:
CREATE TABLE [3rdParty].[MainTable]
(ID INT IDENTITY(1,1) NOT NULL,
CreateDate DATETIME DEFAULT(GETDATE())) --There is no name given to default constraint
2. When I generate the script for deployment using sqlpackage.exe, I see following statements in the generated script.
Generated the script using:
>"C:\Program Files\Microsoft SQL Server\150\DAC\bin\sqlpackage.exe" /action:script /sourcefile:C:\Users\User123\source\repos\DBProject\DBProject\bin\Debug\DBProject.dacpac /TargetConnectionString:"Data Source=MyServer; Initial Catalog=MSSQLDatabase; Trusted_Connection=True" /p:AdditionalDeploymentContributorPaths="C:\Program Files\Microsoft SQL Server\150\DAC\bin\AgileSqlClub.SqlPackageFilter.dll" /p:AdditionalDeploymentContributors=AgileSqlClub.DeploymentFilterContributor /p:AdditionalDeploymentContributorArguments="SqlPackageFilter=IgnoreSchema(3rdParty)" /outputpath:"c:\temp\script_AfterDLL.sql"
Script Output:
/*
Deployment script for MyDatabase
This code was generated by a tool.
Changes to this file may cause incorrect behavior and will be lost if
the code is regenerated.
*/
...
...
GO
PRINT N'Dropping unnamed constraint on [3rdParty].[MainTable]...';
GO
ALTER TABLE [3rdParty].[MainTable] DROP CONSTRAINT [DF__MainTabl__Crea__59463169];
...
...
...(towards the end of the script)
ALTER TABLE [3rdParty].[MainTable_2] WITH CHECK CHECK CONSTRAINT [fk_518_t_44_t_9];
3. I cannot alter 3rd party schema due to company restrictions
4. There are many lines of **unnamed constraint** and WITH CHECK CHECK
constraints generated in the script.
### Questions
1. How can I be able to remove the lines to **DROP unnamed Constraint** on 3rd party schemas? - Even though the dll excludes 3rd party schema, it still has these unnamed constraints scripted/deployed. Also, it is not adding them back too.
2. How can I be able to skip/remove generating WITH CHECK CHECK CONSTRAINT
on 3rd party schemas
Also, I found another issue. The deployment will not succeed due to:
> Rows were detected. The schema update is terminating because data loss might occur
### Output
/*
The column [3rdParty].[MainTable_1].[Col1] is being dropped, data loss could occur.
The column [3rdParty].[MainTable_1].[Col2] is being dropped, data loss could occur.
The column [3rdParty].[MainTable_1].[Col3] is being dropped, data loss could occur.
The column [3rdParty].[MainTable_1].[Col4] is being dropped, data loss could occur.
*/
IF EXISTS (select top 1 1 from [3rdParty].[MainTable_1])
RAISERROR (N'Rows were detected. The schema update is terminating because data loss might occur.', 16, 127) WITH NOWAIT
GO
I tried various combination of parameters with no luck. /p:ExcludeObjectType=Defaults
or /p:DropObjectsNotInSource=False /p:DoNotDropObjectType=Defaults
etc.
Asked by Santhoshkumar KB
(581 rep)
Jun 8, 2020, 06:53 AM
Last activity: Dec 5, 2023, 03:07 PM
Last activity: Dec 5, 2023, 03:07 PM