Мне нужно окружить следующий скрипт sql if-проверкой, которая проверяет существование одной таблицы.В операторе гораздо больше полей, но приведенного ниже фрагмента должно быть достаточно, чтобы понять идею.
Если я окружу весь этот пакет утверждением if, мне не понравится, что у меня есть GO между статами if.Если я уберу GO, он будет жаловаться на то, что TMP_FIELD является недопустимым столбцом.
Как можно сделать это правильно?Все, что я делаю, это собираю кучу полей и перехожу с varchar на datetime.Это часть файла setup.exe, поэтому мне нужно запустить его один раз, а не для будущих обновлений.Как я определяю, если определенная таблица существует, не запускайте сценарий.
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = object_id(N'MY_TABLE') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
ALTER TABLE MY_TABLE ADD TMP_FIELD datetime
GO
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = object_id(N'MY_TABLE') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
UPDATE MY_TABLE SET TMP_FIELD = modifiedDate
GO
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = object_id(N'MY_TABLE') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
ALTER TABLE MY_TABLE DROP COLUMN modifiedDate
GO
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = object_id(N'MY_TABLE') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
ALTER TABLE MY_TABLE ADD modifiedDate datetime
GO
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = object_id(N'MY_TABLE') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
UPDATE MY_TABLE SET modifiedDate = TMP_FIELD
GO
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = object_id(N'MY_TABLE') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
ALTER TABLE MY_TABLE DROP COLUMN TMP_FIELD
GO