2010-02-22 2 views
0

Я получаю ошибки, выполнив следующую инструкцию:Выполняется ли IF в любом случае?

/* AccountTypes Constraints */ 
IF EXISTS (SELECT 1 FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[AccountTypes]') AND type in (N'U')) 
BEGIN 
    PRINT 'Table [AccountTypes] exist.' 

    IF NOT EXISTS(SELECT 1 FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N'[dbo].[FK_Accounts_AccountTypes]') AND parent_object_id = OBJECT_ID(N'[dbo].[Accounts]')) 
    BEGIN 
    ALTER TABLE [dbo].[Accounts] WITH NOCHECK ADD CONSTRAINT [FK_Accounts_AccountTypes] FOREIGN KEY([AccountType]) 
    REFERENCES [dbo].[AccountTypes] ([AccountTypeID]) 
    GO 
    ALTER TABLE [dbo].[Accounts] CHECK CONSTRAINT [FK_Accounts_AccountTypes] 
    GO 
    END 
END 
ELSE 
    PRINT 'Table [AccountTypes] Does not exist to create [FK_Accounts_AccountTypes].' 
/* END: AccountTypes Constraints */ 

Дело в том, что таблица [AccountTypes] на самом деле не существует, но почему я получаю ошибки, пока я уже проверить, если таблица существует или нет! !!!

следующие ошибки я получаю:

Msg 102, Level 15, State 1, Line 14 
Incorrect syntax near 'AccountTypeID'. 

Msg 4917, Level 16, State 0, Line 1 
Constraint 'FK_Accounts_AccountTypes' does not exist. 

Msg 4916, Level 16, State 0, Line 1 
Could not enable or disable the constraint. See previous errors. 

Msg 156, Level 15, State 1, Line 2 
Incorrect syntax near the keyword 'END'. 

SQL 2005 Express

+0

Спасибо за редактирование, не уверен, что произошло! предварительный просмотр был в порядке. –

ответ

2

ALTER TABLE должен быть первым в пакете. То есть вы не можете проверить наличие в первую очередь в форме, которую вы имеете.

Тогда вы не можете придерживаться GO в качестве разделителя партии на полпути.

Таким образом, динамический SQL:

/* AccountTypes Constraints */ 
IF EXISTS (SELECT 1 FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[AccountTypes]') AND type in (N'U')) 
BEGIN 
    PRINT 'Table [AccountTypes] exist.' 

    IF NOT EXISTS(SELECT 1 FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N'[dbo].[FK_Accounts_AccountTypes]') AND parent_object_id = OBJECT_ID(N'[dbo].[Accounts]')) 
    BEGIN 
    EXEC ('ALTER TABLE [dbo].[Accounts] WITH NOCHECK ADD CONSTRAINT [FK_Accounts_AccountTypes] FOREIGN KEY([AccountType]) 
    REFERENCES [dbo].[AccountTypes] ([AccountTypeID])') 
    EXEC ('...') 
+0

UPDATE: теперь все таблицы существуют, и я все равно получаю ту же ошибку !!! –

+0

извините, просто прочитайте ваш ответ, позвольте мне проверить его –

+0

Прохладный, он работает. благодаря –