Поделиться через


Устранение неполадок проекта базы данных, построения и развертывания

При создании, изменении, построении и развертывании проектов баз данных могут встречаться следующие проблемы:

  • Ошибки в объектах базы данных

  • Использование новых зарезервированных слов в Microsoft SQL Server 2005

  • Отличия построения из командной строки

  • Зависимости и скрипты обновления

  • Нестандартные идентификаторы могут стать причиной проблемы с перезагрузкой проекта

  • Внутреннее состояние базы данных не согласовано с ее содержимым

  • Отмена ожидающих изменений

  • Не удается найти пользователя или группу Windows NT

  • Дублирующиеся имена объектов и файлы исключений

  • Имена, уточненные именами базы данных и сервера

  • Производительность импорта схемы базы данных

  • Навигация по ошибкам построения

  • Синтаксические ошибки при использовании межбазовых ссылок

  • Переименование проектов и сборок SQLCLR

  • Неподдерживаемый синтаксис для FULLTEXT STOPLIST

  • Предложение SORT_IN_TEMPDB не импортируется

  • Состояние нестандартных идентификаторов утрачивается при импорте функций с табличными значениями, которые включают несколько инструкций

  • Несколько ошибок проекта не были исправлены после построения проекта

  • Неправильный синтаксис скрипта, выполняемого после развертывания

Ошибки в объектах базы данных

Если объект базы данных содержит одну или несколько синтаксических ошибок, соответствующие сообщения об ошибках отображаются в окне Список ошибок.

Примечание

Сообщение об ошибке, отображаемое в окне Список ошибок, должно содержать сведения о том, что можно сделать для разрешения ошибки.После разрешения ошибки и сохранения объекта базы данных значок объекта базы данных возвращается в обычное состояние и окно Список ошибок очищается.

Использование новых зарезервированных слов в Microsoft SQL Server 2005

Ниже приведены новые зарезервированные слова в SQL Server 2005: EXTERNAL, PIVOT, REVERT, TABLESAMPLE и UNPIVOT. В окне Выходные данные выводится сообщение об ошибке, если эти зарезервированные слова используются как имена объектов схемы в проекте базы данных, предназначенном для Microsoft SQL Server 2005 или SQL Server 2008.

Примечание

Чтобы обойти это ограничение, можно заключить имена объектов схемы в кавычки.Например, можно использовать "CREATE TABLE [External] (c1 INT)".

Отличия построения из командной строки

При выполнении построения из командной строки, когда проект открыт в Visual Studio, можно не получить всех ошибок построения, выдаваемых по построении из пользовательского интерфейса.

Примечание

Чтобы обойти эту проблему, закройте проект базы данных Visual Studio перед выполнением построения из командной строки.

Зависимости и скрипты обновления

Чтобы создать верный порядок объектов в скрипте обновления, функция сравнения схем анализирует зависимости объектов. Например, если представление зависит от таблицы, эта таблица должна быть создана до представления. Если объект, зависящий от другого объекта, не использует имя, уточненное именем схемы, зависимость может не быть идентифицирована и скрипт обновления или создания может содержать инструкции в неверном порядке. Это может привести к ошибкам при обновлении целевого объекта в соответствии с исходным или развертывании изменений в базе данных. Эта проблема относится и к скриптам построения базы данных.

Примечание

Для решения этой проблемы уточните имена объектов, участвующих в отношениях зависимости, именами схем.В Visual Studio Premium и Visual Studio Ultimate можно воспользоваться рефакторингом базы данных для установления полной формы всех имен.Дополнительные сведения см. в разделе Полные имена объектов базы данных. В следующем примере можно гарантировать правильную идентификацию зависимости, если изменить конец инструкции, чтобы она ссылалась на [dbo].[KeysTable], а не просто на KeysTable:

CREATE VIEW [NewUser].[ViewReferencingScalarFunction] AS SELECT Column2, dbo.SimpleMultiplyParamByTwo(PK_Column) AS [Function] FROM KeysTable

Нестандартные идентификаторы могут стать причиной проблемы с перезагрузкой проекта

При сохранении объектов или загрузке базы данных, содержащей идентификаторы в кавычках, выдается ошибка, если флажок SET QUOTED_IDENTIFIER в свойствах базы данных снят. Это может произойти, если импортировать схему базы данных из базы данных, использующей идентификаторы в кавычках.

Примечание

Для решения этой проблемы имеются две возможности.Можно изменить определения объектов для использования квадратных скобок вместо кавычек.Например, можно изменить "My Table" на [My Table].В качестве альтернативы можно открыть меню Проект, выбрать команду Свойства DatabaseProject, перейти на вкладку Свойства базы данных и установить флажок SET QUOTED_IDENTIFIER.

Внутреннее состояние базы данных не согласовано с ее содержимым

При работе с Visual Studio Premium можно получить следующее сообщение об ошибке: "Внутреннее состояние проекта базы данных не согласуется с его содержимым. Для устранения ошибки необходимо выгрузить проект и загрузить его повторно". Эта ошибка указывает, что проект, поддерживающий список файлов, которые должны в нем содержаться, более не синхронизирован с состоянием этих файлов. Наиболее распространенной причиной такой ошибки является удаление одного из файлов проекта с диска, когда проект базы данных не был открыт. Еще данная ошибка может произойти из-за проблем с импортом схемы базы данных.

Примечание

Для решения этой проблемы следует щелкнуть Синхронизировать в Представлении схемы.Если это не сработает, можно выгрузить и загрузить обратно проект базы данных.Для этого щелкните его в обозревателе решений.Откройте меню Проект и выберите команду Отменить загрузку проекта.После выгрузки проекта откройте меню Проект и выберите команду Перезагрузить проект.

Отмена ожидающих изменений

Представление схемы не обновляется автоматически после использования команды "Отменить ожидающие изменения" системы управления версиями. Если, к примеру, переименовать таблицу и столбец и затем отменить эти изменения, в представлении схемы появится сообщение "Внешнее изменение файла, необходима повторная синхронизация".

Примечание

Для решения этой проблемы необходимо щелкнуть Синхронизировать на панели инструментов Представление схемы.

Не удается найти пользователя или группу Windows NT

Если проект базы данных ссылается на недоступное имя входа, выдается сообщение об ошибке "Не удается найти пользователя или группу Windows NT "имя_домена\имя_входа". Проверьте правильность имени". Эта проблема может встретиться при работе на компьютере, относящемся к другому домену, в отличие от базы данных, из которой импортируется схема. Обычно данная ситуация возникает при работе дома над проектом базы данных, созданным в другом месте. В такой ситуации построить или развернуть проект базы данных не удастся.

Примечание

Можно создать пользователя, опустив часть FOR LOGIN.Например, можно использовать следующее: CREATE USER [Domain\someLogin].Этот пользователь будет создан при развертывании проекта базы данных и будет связан с именем входа [Domain\someLogin], но у вас не будет необходимости ссылаться на это имя в проекте базы данных.

Дублирующиеся имена объектов и файлы исключений

Если в проекте базы данных имеются объекты с одинаковыми именами (например, две таблицы с именем Orders), в окне Список ошибок выводится ошибка. И даже если разрешить ее, исключив файл, содержащий определение одного из объектов, сообщение об ошибке сразу же не исчезнет.

Примечание

Для решения этой проблемы можно щелкнуть Обновить или отредактировать файл, содержащий определение объекта, переименовать объект и сохранить файл.

Имена, уточненные именами базы данных и сервера

При создании объекта в Visual Studio Premium этот объект получает имя в соответствии с соглашением об именовании [схема].[объект].[дочерний]. Если требуется сослаться на объект в другой базе данных или на другом сервере, можно включить в имя этого объекта имя базы данных и сервера: [сервер].[базаДанных].[схема].[объект].[дочерний]. Если создается хранимая процедура или представление, ссылающиеся на объект, которому требуется уточненное именем базы данных или сервера имя, выводится предупреждение.

Примечание

Для разрешения этого предупреждения необходимо определить межбазовую ссылку.Дополнительные сведения о межбазовых ссылках см. в разделах Использование ссылок в проектах баз данных и Практическое руководство. Добавление ссылок на проекты базы данных.

Важно!

Если проект имеет неразрешенные предупреждения об уточненных именем базы данных или сервера именах и при этом установлен флажок Обрабатывать предупреждения как ошибки на вкладке Построение свойств проекта базы данных, развертывание завершается неудачей.Причина в том, что уточненные именем базы данных или сервера имена генерируют предупреждения.Необходимо снять флажок Обрабатывать предупреждения как ошибки, если используются уточненные именем базы данных или сервера имена.

Производительность импорта схемы базы данных

Если импорт схемы базы данных выполняется при открытом окне Редактор списка тестов или Представление теста, операция импорта длится значительно дольше. Это замедление имеет место и в мастере создания проекта базы данных (если выбран импорт схемы), и при выполнении операции импорта схемы базы данных. Данная проблема существует даже в том случае, если закрыть окна Редактор списка тестов и Представление теста перед импортом схемы базы данных.

Примечание

Для решения этой проблемы необходимо закрыть окна Редактор списка тестов и Представление теста, а затем закрыть и перезапустить Visual Studio, после чего импортировать схему базы данных.Если схема имеет небольшой размер, может понадобиться выполнить эти шаги; для примера базы данных AdventureWorks операция по импорту схемы заняла 27 секунд без открытого окна Редактор списка тестов и 48 секунд - с открытым окном Редактор списка тестов.

Навигация по ошибкам построения

Если развертывание завершается неудачей, можно исправить ошибку, обновив сгенерированный скрипт построения. Необходимо исправить исходный файл, использовавшийся для создания этого скрипта построения. Если дважды щелкнуть ошибку развертывания в окне Список ошибок, скрипт построения откроется в редакторе и будет отображена строка, вызвавшая эту ошибку.

Примечание

Для решения этой проблемы необходимо просмотреть скрипт построения, чтобы определить причину неудачи. а затем изменить исходный файл проекта базы данных, содержащий ошибку.Например, если ошибку содержит выполняемый после развертывания скрипт Script.PostDeployment.sql, необходимо изменить его, а не скрипт построения.

Синтаксические ошибки при использовании межбазовых ссылок

При сохранении определения объекта, содержащего ссылку на объект в другой базе данных, можно получить одну или более синтаксических ошибок. Например. можно добавить ссылку на проект базы данных, определить переменные с именами RefServer и RefDatabase и присвоить им значения. Затем можно определить представление следующим образом:

CREATE VIEW [dbo].[MyView]
AS
SELECT * FROM $(RefServer).$(RefDatabase).dbo.TableName

При сохранении этого определения можно получить одно или более сообщений об ошибках, указывающих на неверный синтаксис. Эти сообщения об ошибках могут ссылаться на имя базы данных проверки времени разработки, которое может быть неоднозначным.

Примечание

Для разрешения этой проблемы необходимо заключить имена переменных в квадратные скобки.Чтобы исправить данный пример, измените его так:

CREATE VIEW [dbo].[MyView]
AS
SELECT * FROM [$(RefServer)].[$(RefDatabase)].dbo.TableName

Переименование проектов и сборок SQLCLR

Вы не сможете развернуть проект базы данных, содержащий ссылку на проект или сборку SQLCLR, если он переименовывается без обновления соответствующей ссылки.

Примечание

Чтобы устранить эту ошибку, удалите старую ссылку и добавьте ссылку на проект или сборку SQLCLR с обновленным именем.

Неподдерживаемый синтаксис для FULLTEXT STOPLIST

Visual Studio Premium не моделирует необязательный синтаксис FROM { [DatabaseName.] SourceStoplistName } | SYSTEM STOPLIST ] для инструкции CREATE FULLTEXT STOPLIST. Этот синтаксис пропускается в случае импорта объекта, который его использует.

Примечание

Чтобы исправить эту ошибку, необходимо вручную добавить игнорируемые слова к скрипту, выполняемому после развертывания.Дополнительные сведения см. в разделе Практическое руководство. Определение скриптов, выполняемых перед развертыванием и после развертывания.

Предложение SORT_IN_TEMPDB не импортируется

Visual Studio Premium не может импортировать предложение SORT_IN_TEMPDB для индексов. Например, может использоваться следующий код:

CREATE TABLE [dbo].[IndexTable]
{
[Column1] [INT] NOT NULL
}
GO
CREATE NONCLUSTERED INDEX [SortInTempDbOn] ON [dbo].[IndexTable]
{
[Column1] ASC
} 
WITH (SORT_IN_TEMPDB = ON)
GO

Индекс не импортируется без предложения SORT_IN_TEMPDB.

Примечание

Чтобы исправить эту ошибку, необходимо вручную исправить определение индекса в случае импорта изменений из базы данных в проект.

Состояние нестандартных идентификаторов утрачивается при импорте функций с табличными значениями, которые включают несколько инструкций

Можно импортировать функции с табличными значениями, содержащие несколько инструкций, однако состояние строки нестандартного идентификатора не сохраняется в SQL Server. Во время импорта этих функций могут возникать ошибки, так как параметр по умолчанию для нестандартных идентификаторов имеет значение ON.

Примечание

Чтобы исправить эту ошибку, необходимо изменить параметр нестандартного идентификатора для любых функций с табличными значениями, содержащих несколько инструкций, после импорта объектов и параметров или после записи обновлений из базы данных в проект.

Несколько ошибок проекта не были исправлены после повторного построения проекта

Некоторые ошибки, которые могут возникать в проекте базы данных, не исчезают после устранения причины ошибки, даже если проект строится повторно. Например, в случае удаления файла .sqlpermissions, на который ссылается проект, с использованием Проводника Windows, появляется прогнозируемое сообщение об ошибке. Если вы используете обозреватель решений для удаления файла из проекта, а затем повторно строите проект, ошибка сохраняется, хотя она и была исправлена.

Примечание

Для устранения этой проблемы необходимо щелкнуть "Повторно анализировать проект" на панели инструментов в обозревателе решений.

Неправильный синтаксис скрипта, выполняемого после развертывания

По умолчанию в Visual Studio 2010 режим SQLCMD в редакторе Transact-SQL выключен. Это изменение сделано, так-как Intellisense не работает, когда включен режим SQLCMD. Во время развертывания может отображаться указанная ниже ошибка, если в скрипт, выполняемый после развертывания, включены операторы.

Incorrect syntax near ':'. C:\MySandbox\MySolution\MyProject\Scripts\Post-Deployment\Script.PostDeployment.sql

Примечание

Чтобы устранить эту проблему, необходимо разрешить режим SQLCMD.Чтобы разрешить режим SQLCMD, щелкните Режим SQLCMD на панели инструментов Редактора Transact-SQL.

См. также

Задачи

Практическое руководство. Изменение объектов базы данных

Практическое руководство. Сравнение и синхронизация двух баз данных

Основные понятия

Переименование всех ссылок на объект базы данных

Переименование всех ссылок на объект базы данных

Журнал изменений

Дата

Журнал

Причина

Июль 2010

Добавлена запись, предупреждающая пользователей об изменении поведения по умолчанию в Visual Studio 2010, которое может вызвать проблемы в скрипте, выполняемом после развертывания.

Обратная связь от клиента.