4

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

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

ответ

6

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

Это плохо:

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

Это хорошо:

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