Сравнение схем обнаруживает различия для идентичных хранимых процедур

Я использую инструмент сравнения схем Visual Studio 2012 для сравнения фактической базы данных с файлом пакета DAC Microsoft SQL Server (dacpac). Ожидается, что база данных и файл "равны". Однако сравнение схем сообщает о различиях в свойстве BodyScript трех хранимых процедур, каждая из которых содержит много динамического SQL. Что расстраивает, так это то, что в фактическом различии определений объектов нет очевидных различий между определениями хранимых процедур. Кроме того, мы скопировали сценарии в несколько различных инструментов для поиска различий в типах пробелов, но оказалось, что эти два сценария идентичны в двоичном виде. Мы экспериментировали с многочисленными параметрами сравнения схем (игнорировать пробелы, игнорировать регистр ключевых слов и т. д.), но, похоже, ничто не решает эту проблему.

При изучении этой проблемы я столкнулся с похожими проблемами, опубликованными на странице Microsoft Connect, а также здесь, на StackOverflow, но похоже, что эти проблемы еще предстоит решить. Есть ли у кого-нибудь предложения по другим способам решения этой проблемы?


person Dan Forbes    schedule 16.07.2015    source источник


Ответы (1)


Похоже, что эта проблема вызвана символами новой строки в строковых литералах.

Это плохо:

DECLARE @badQuery NVARCHAR(MAX) = N'SELECT
                                      *
                                    FROM
                                      [dbo].[MyRadTable]';

Это хорошо:

DECLARE @goodQuery NVARCHAR(MAX) = N'SELECT '+
                                      '* ' +
                                    'FROM ' +
                                      '[dbo].[MyRadTable]';
person Dan Forbes    schedule 16.07.2015