snippetsqlMinor
SSMS suddenly starts generating DEFAULT constraints inlined into the CREATE TABLE statements instead of ALTER TABLE
Viewed 0 times
startsconstraintsssmstheinlinedcreateintostatementssuddenlyinstead
Problem
I've been using SSMS to generate scripts of the whole database and storing them in the source control.
It's been working fine for many years, but few days ago I noticed that SSMS started generating
Here is an example of one table.
This is how the script looked like before:
Here
This is how it looks like now:
Here
It didn't happen to all tables with
It's been working fine for many years, but few days ago I noticed that SSMS started generating
DEFAULT constraints as a clause inlined into the CREATE TABLE statement instead of adding a separate ALTER TABLE statement.Here is an example of one table.
This is how the script looked like before:
USE [my db name]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[ConsignmentGroups](
[ID] [int] IDENTITY(1,1) NOT NULL,
[ConsignmentID] [int] NOT NULL,
[Name] [nvarchar](255) NOT NULL,
[Notes] [nvarchar](255) NOT NULL,
CONSTRAINT [PK_ConsignmentGroups] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[ConsignmentGroups] ADD CONSTRAINT [DF_ConsignmentGroups_Notes] DEFAULT ('') FOR [Notes]
GOHere
DEFAULT constraint is scripted as a separate ALTER TABLE statement.This is how it looks like now:
USE [my db name]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[ConsignmentGroups](
[ID] [int] IDENTITY(1,1) NOT NULL,
[ConsignmentID] [int] NOT NULL,
[Name] [nvarchar](255) NOT NULL,
[Notes] [nvarchar](255) NOT NULL CONSTRAINT [DF_ConsignmentGroups_Notes] DEFAULT (''),
CONSTRAINT [PK_ConsignmentGroups] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GOHere
DEFAULT constraint is inlined into the CREATE TABLE statement.It didn't happen to all tables with
DEFAULT constraints. There are about 60 tables with DEFAULT constraints and at least one of them is still scripted as ALTER TABLE statement. I don't think anyone touched the table in the example above (`ConsigSolution
This 'might' be the problem, although, there does not appear to be a 'solution'. I was able to reproduce your issue. See this connect item regarding this problem:
https://connect.microsoft.com/SQLServer/Feedback/Details/895113
The SQL SMO generates for a table with defaults depends on the rowcount of the table. This makes it impossible to programmatically compare the schema.
https://connect.microsoft.com/SQLServer/Feedback/Details/895113
The SQL SMO generates for a table with defaults depends on the rowcount of the table. This makes it impossible to programmatically compare the schema.
Context
StackExchange Database Administrators Q#146130, answer score: 3
Revisions (0)
No revisions yet.