В схеме SSDT Сравните, как игнорировать различия в объектах типа "Схема",

Из параметров сравнения схем я отменил выбор всех типов объектов:

Schema compare object type options

Он все еще показывает мне различия в объектах схемы:

Difference table showing schema objects

Я прокрутил большой список опций General, и никто из них не сделал этого:

General options

Ответ 1

Я взломал его. Если вы сохраните сравнение, вы можете добавить это в файл:

  <PropertyElementName>
    <Name>Microsoft.Data.Tools.Schema.Sql.SchemaModel.SqlSchema</Name>
    <Value>ExcludedType</Value>
  </PropertyElementName>

Вы увидите, где, когда вы его открываете. Этот параметр не находится в пользовательском интерфейсе, но, по-видимому, поддерживается.

Ответ 2

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

Ответ 3

Вы можете установить схему исключения в коде, запустив приведенный ниже файл как exe перед выполнением слияния схемы. Приведенному ниже коду необходим пакет nuget Microsoft.SqlServer.DacFx для добавления в ваш проект. Он принимает 2 параметра, один из которых - путь к файлу .scmp, а второй - строку схем, разделенных запятыми, для исключения. Он перезапишет предоставленный .scmp и исключит предоставленные вами имена схем.

Он по существу добавляет разделы XML в файл .scmp, что эквивалентно отмене проверки объектов в пользовательском интерфейсе и сохранению файла. (постоянное предпочтение)

Это выполнение exe может быть задачей в вашем конвейере выпуска VSTS (VSO), если вы хотите исключить объединение одной схемы во время развертывания.

using System;
using System.Linq;
using System.Collections.Generic;
using Microsoft.SqlServer.Dac.Compare;

namespace DatabaseSchemaMergeHelper
{
    /// <summary>
    /// Iterates through a supplied schema compare file and excludes objects belonging to a supplied list of schema
    /// </summary>
    class Program
    {
        /// <summary>
        /// first argument is the scmp file to update, second argument is comma separated list of schemas to exclude
        /// </summary>
        /// <param name="args"></param>
        static void Main(string[] args)
        {
            if (args.Length == 0) return;

            var scmpFilePath = args[0];
            var listOfSchemasToExclude = args[1].Split(',').ToList();

            // load comparison from Schema Compare (.scmp) file
            var comparison = new SchemaComparison(scmpFilePath);
            var comparisonResult = comparison.Compare();

            // find changes pertaining to objects belonging to the supplied schema exclusion list
            var listOfDifferencesToExclude = new List<SchemaDifference>();

            // add those objects to a list
            foreach (SchemaDifference difference in comparisonResult.Differences)
            {
                if (difference.TargetObject != null &&
                    difference.TargetObject.Name != null &&
                    difference.TargetObject.Name.HasName &&
                    listOfSchemasToExclude.Contains(difference.TargetObject.Name.Parts[0], StringComparer.OrdinalIgnoreCase))
                {
                    listOfDifferencesToExclude.Add(difference);
                }
            }

            // add the needed exclusions to the .scmp file
            foreach (var diff in listOfDifferencesToExclude)
            {
                if (diff.SourceObject != null)
                {
                    var SourceExclusionObject = new SchemaComparisonExcludedObjectId(diff.SourceObject.ObjectType, diff.SourceObject.Name,
                                                                                     diff.Parent?.SourceObject.ObjectType, diff.Parent?.SourceObject.Name);
                    comparison.ExcludedSourceObjects.Add(SourceExclusionObject);
                }

                var TargetExclusionObject = new SchemaComparisonExcludedObjectId(diff.TargetObject.ObjectType, diff.TargetObject.Name,
                                                                                 diff.Parent?.TargetObject.ObjectType, diff.Parent?.TargetObject.Name);
                comparison.ExcludedTargetObjects.Add(TargetExclusionObject);
            }

            // save the file, overwrites the existing scmp.
            comparison.SaveToFile(scmpFilePath, true);
        }
    }
}