Options

Check Constraint logic changed on synchronize

winstarwinstar Posts: 3
edited September 14, 2010 12:26PM in SQL Compare Previous Versions
I've come across an issue with CHECK constraints where the logic can actually be changed when synchronising from a scripts folder to a database. It seems that SQL Compare is parsing the check constraint at compare time. For example, it will convert an "col1 IN (1,3) to "col1 = (3) OR col1 = (1)". This in itself is fine, but the problem is when using brackets within a more complex CHECK constraint. SQL Compare does not correctly keep the brackets which can lead to a change in the logic. The example below illustrates this.

Table definition file dbo.myTable.sql:
CREATE TABLE [dbo].[myTable]
(
col1 int null,
col2 int not null
)
GO

SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO

ALTER TABLE [dbo].[myTable] ADD CONSTRAINT [PK_myTable] PRIMARY KEY CLUSTERED (col1) ON [PRIMARY]
GO
ALTER TABLE [dbo].[myTable] WITH NOCHECK ADD CONSTRAINT [CK_myTable] CHECK ((NOT col1 IS NULL AND col2 in (1,3)) OR (col1 IS NULL AND col2 = 2))
GO

When running the compare in SQL Compare, the check constraint becomes:
ALTER TABLE [dbo].[myTable] WITH NOCHECK ADD CONSTRAINT [CK_myTable] CHECK ((NOT [col1] IS NULL AND [col2]=(3) OR [col2]=(1) OR [col1] IS NULL AND [col2]=(2)))

i.e. the brackets have been removed, and the logic is not the same (note the missing bracket after the "[col2]=(1)".

I have seen this issue with SQL Compare 7 and 8. Is this a known issue, and what is the best workaround?

Thanks

Comments

  • Options
    Hi there,

    Can you please confirm the exact version of SQL Compare you are using? There has been a number of fixes made around constraints and script folders in the patch and I wanted to confirm if you are working with the patch already or not.

    If not, you can obtain the latest patch from the below link:

    http://www.red-gate.com/messageboard/vi ... hp?t=11077

    Thanks!

    Pete
    Peter Peart
    Red Gate Software Ltd
    +44 (0)870 160 0037 ext. 8569
    1 866 RED GATE ext. 8569
  • Options
    Hi Pete,

    I was not working with this patch. The version I was using was 8.2.0.16.

    I have just upgraded to the patch, and the result is still the same.

    Thanks,
    Rich
  • Options
    Hi there,

    Thanks for your post and sorry that the patch isn't working for you. Is there any chance you would be able to send us the schema creation script, a backup of the DB or a SQL Compare snapshot along with the script folder you are comparing against and the SQL Compare project file? We will then have a go at replicating this in house for you.

    You can send this to support(at)red-gate.com using the subject F0038643 as we have a call open already for you.

    Many thanks!
    Peter Peart
    Red Gate Software Ltd
    +44 (0)870 160 0037 ext. 8569
    1 866 RED GATE ext. 8569
Sign In or Register to comment.