SQL Server Check / rozdíl NOCHECK v generované skripty

hlasů
16

Snažím se synchronizovat schémat mezi různých databázích. V podstatě jsem běžel tasks-> vytvořit skripty s SQL Server Management Studio (2005) na obou databázích a porovnávám výstup s diff nástroje.

Z nějakého důvodu, jeden skript dodává vazbu s přezkoušením a jeden S žádná kontrola , následovaný oběma omezeními je znovu povolit.

I na první databázi I získat:

ALTER TABLE [dbo].[Profile]  WITH CHECK ADD  CONSTRAINT [FK_Profile_OrganizationID] FOREIGN KEY([OrganizationID])
REFERENCES [dbo].[Organization] ([OrganizationID])
GO
ALTER TABLE [dbo].[Profile] CHECK CONSTRAINT [FK_Profile_OrganizationID]
GO

Druhá databáze generuje as

ALTER TABLE [dbo].[Profile]  WITH NOCHECK ADD  CONSTRAINT [FK_Profile_OrganizationID] FOREIGN KEY([OrganizationID])
REFERENCES [dbo].[Organization] ([OrganizationID])
GO
ALTER TABLE [dbo].[Profile] CHECK CONSTRAINT [FK_Profile_OrganizationID]
GO

Takže mám dvě otázky:

  1. Je konečný výsledek stejný? ( Edit: Zdá se, že mnoho lidí se zvedne pouze na první prohlášení ze dvou scénářů Mám zájem o konečném výsledku jako celek obou skriptů.).

  2. V případě, že konečný výsledek je stejný, proč Management Studio vytvářet jim rozdílně různými databázemi?

Položena 26/08/2009 v 23:49
zdroj uživatelem
V jiných jazycích...                            


3 odpovědí

hlasů
16

Konečný výsledek není totéž!

SQL Server nebude věřit, je to nekontroluje jedinečnost FK. To znamená, že je zapotřebí další zpracování, pokud používáte sloupec v dotazu.
Dlouhý příběh krátký, je, že byste měli dostat SQL Server zkontrolovat sloupec takže to považuje za důvěryhodné.

Pokud jde o důvod, proč oni jsou odlišné od různých serverů, zkontrolujte isnottrusted sloupec sys.foreign_keys. To může mít vliv na to, co SSMS generuje?

Pro více informací o chvástat se o tom, zjistit mé další odpověď , která se týká FK & No možností CHECK / zkontrolovat.

Odpovězeno 27/08/2009 v 03:29
zdroj uživatelem

hlasů
12

Ano, tyto dva skripty jsou odlišné

S jednosměrným zkontroluje existující data proti novému omezení.
S NOCHECK nebude kontrolovat existující data proti novému omezení. To vám umožní mít podřízené záznamy bez odpovídající rodiče.

EDIT: Co proč SSMS dělá to nemám tušení

Odpovězeno 27/08/2009 v 02:28
zdroj uživatelem

hlasů
0

Oba jsou 2005 servery SQL Server? Jako výsledek je stejný, generování kódu nástroj, možná použít různé postupy založené na různých verzí produktu

Odpovězeno 27/08/2009 v 02:51
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more