2017-02-20 9 views
2

Как использовать Source Control с Sql Server Management Studio?Как использовать Source Control с Sql Server Management Studio?

+1

Какая версия SSMS и какая версия TFS? Также, что вы подразумеваете под «это будет самонадеянно». Если это так, зачем задавать вопрос на SO? –

+1

Потому что не было ответа на этот вопрос. –

ответ

1

Вам необходимо использовать Team Foundation Server MSSCCI Provider, что позволяет интегрировать использование Team Foundation Version Control с продуктами, которые не поддерживают интеграцию Team Explorer.

0

Это зависит от того, какую версию SSMS вы используете.

Если вы используете версию, которая использует оболочку Visual Studio, то она уже интегрирована в SSMS, и все, что вам нужно сделать, это включить ее. This Сообщение в блоге от Sql Server Team Объясняет, как это сделать.

Если вы используете предыдущую версию, вам необходимо загрузить и установить поставщика. This дает полную информацию.

0

Включение интеграции системы управления версиями в SSMS Чтобы включить интеграцию TFS в SSMS, выполните следующие действия:

1) Закрыть SSMS, если он работает.

2) Установите Visual Studio 2015 на свою машину SSMS. Если у вас еще нет Visual Studio, Community Edition будет работать нормально. Это большая загрузка, но вы можете сэкономить некоторое пространство, отменив выбор всех языков во время установки Visual Studio, если ваша единственная цель - включить Source Control в SSMS.

3) Отредактируйте файл ssms.pkgundef в C: \ Program Files (x86) \ Microsoft SQL Server \ 130 \ Tools \ Binn \ ManagementStudio \ ssms.pkgundef.

В начале этого файла имеется ряд пакетов, сгруппированных вместе, связанных с функциями управления потоком TFS. Эти пакеты должны быть удалены из файла pkgundef. Это можно сделать, удалив раздел или закомментировав каждую строку, используя «//». Вот пример того, как должен выглядеть раздел, если он закомментирован: // Записи конфигурации TFS SCC. Записи TFS блокируют загрузку Team Explorer.

// Microsoft.VisualStudio.TeamFoundation.Lab 
//[$RootKey$\Packages\{17c5d08a-602c-4dfb-82b5-8e0f7f50c9d7}] 
// GitHub Package 
//[$RootKey$\Packages\{c3d3dc68-c977-411f-b3e8-03b0dccf7dfc}] 
// Team Foundation Server Provider Package 
//[$RootKey$\Packages\{5BF14E63-E267-4787-B20B-B814FD043B38}] 
// Microsoft.VisualStudio.TeamFoundation.WorkItemTracking.WitPcwPackage 
//[$RootKey$\Packages\{6238f138-0c0c-49ec-b24b-215ee59d84f0}] 
// Microsoft.VisualStudio.TeamFoundation.Build.BuildPackage 
//[$RootKey$\Packages\{739f34b3-9ba6-4356-9178-ac3ea81bdf47}] 
// Microsoft.VisualStudio.TeamFoundation.WorkItemTracking 
//[$RootKey$\Packages\{ca39e596-31ed-4b34-aa36-5f0240457a7e}] 
// Microsoft.VisualStudio.TeamFoundation 
//[$RootKey$\Packages\{b80b010d-188c-4b19-b483-6c20d52071ae}] 
// Microsoft.TeamFoundation.Git.Provider.SccProviderPackage 
//[$RootKey$\Packages\{7fe30a77-37f9-4cf2-83dd-96b207028e1b}] 
// Microsoft.VisualStudio.TeamFoundation.VersionControl.SccPcwPluginPackage 
//[$RootKey$\Packages\{1b4f495a-280a-3ba4-8db0-9c9b735e98ce}] 
// Microsoft.VisualStudio.TeamFoundation.VersionControl.HatPackage 
//[$RootKey$\Packages\{4CA58AB2-18FA-4F8D-95D4-32DDF27D184C}] 
// Visual SourceSafe Provider Package 
//[$RootKey$\Packages\{AA8EB8CD-7A51-11D0-92C3-00A0C9138C45}] 
// Visual SourceSafe Provider Stub Package 
    [$RootKey$\Packages\{53544C4D-B03D-4209-A7D0-D9DD13A4019B}] 
// Microsoft.VisualStudio.TeamFoundation.Initialization.InitializationPackage 
    [$RootKey$\Packages\{75DF55D4-EC28-47FC-88AC-BE56203C9012}] 
// Team Foundation Server Provider Stub Package 
    [$RootKey$\Packages\{D79B7E0A-F994-4D4D-8FAE-CAE147279E21}] 
// Microsoft.VisualStudio.Services.SccDisplayInformationPackage 
    [$RootKey$\Packages\{D7BB9305-5804-4F92-9CFE-119F4CB0563B}] 
// Microsoft.VisualStudio.TeamFoundation.Lab.LabPcwPluginPackage 
    [$RootKey$\Packages\{e0910062-da1f-411c-b152-a3fc6392ee1f}] 
    [$RootKey$\ToolsOptionsPages\Source Control] 
    [$RootKey$\AutoLoadPackages\{11b8e6d7-c08b-4385-b321-321078cdd1f8}] 
// TFS SCC Configuration entries. 

После завершения запуска SSMS и меню «Команда» должны быть видны в строке меню SSMS. Это меню и связанные с ним функции - это стандартная функциональность Visual Studio. Это позволяет подключаться к серверам TFS или серверам Git.

3

Управление версиями базы данных SQL непосредственно из SSMS может быть выполнено с использованием различных сторонних надстроек. Например, ApexSQL Source Control имеет бесшовную интеграцию SSMS и может использоваться не только с TFS, но следующие системы SC поддерживаются из коробки: Git, Subversion, Mercurial, Perforce. Поддержка Team Foundation Server включает онлайн-версию Visual Studio Team Services.

Как поясняется в this article, надстройка управления версиями ApexSQL представляет собой, помимо прочего, IDE, называемую вкладкой центра действий, позволяет вам поддерживать репозиторий управления версиями, не обязательно сначала создавать сценарии из объектов базы данных. Обычно вкладка центра действий автоматически открывается, как только вы завершаете связывание базы данных в репозиторий управления версиями, но вы все же можете вручную открыть ее с помощью клавиш комбинации клавиш Ctrl + Alt + A или щелкнув правой кнопкой мыши ссылку на базу данных, привязанную к источнику данных, и выполнить навигацию в пункт «Центр действий».

0

Мое решение - только история версий. У меня есть запланированный сценарий powershell, который генерирует определения указанных объектов (хранимые процедуры, функции, таблицы и представления). Затем он использует git для обновления репозитория GitLab. Git будет обновляться только в том случае, если есть изменения в содержимом файла, поэтому каждый раз можно генерировать все сценарии.

function SQL-Script-Database 
{ 
    <# 
    .SYNOPSIS 
    Script all database objects for the given database. 

    .DESCRIPTION 
    This function scripts all database objects (i.e.: tables, views, stored 
    procedures, and user defined functions) for the specified database on the 
    the given server. It creates a subdirectory per object type under 
    the path specified. 

    .PARAMETER savePath 
    The root path where to save object definitions. 

    .PARAMETER database 
    The database to script (default = $global:DatabaseName) 

    .PARAMETER DatabaseServer 
    The database server to be used (default: $global:DatabaseServer). 

    #> 

    param (
     [parameter(Mandatory = $true)][string] $savePath, 
     [parameter(Mandatory = $false)][string] $database = $global:DatabaseName, 
     [parameter(Mandatory = $false)][string] $DatabaseServer = $global:DatabaseServer 
    ) 

    try 
    { 
     if (!$DatabaseServer) 
      { throw "`$DatabaseServer or `$InstanceName variable is not properly initialized" } 

     [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SMO") | Out-Null 

     $s = New-Object Microsoft.SqlServer.Management.Smo.Server($DatabaseServer) 
     $db = $s.databases[$database] 

     $objects = $db.Tables 
     $objects += $db.Views 
     $objects += $db.StoredProcedures 
     $objects += $db.UserDefinedFunctions 

     $scripter = New-Object ('Microsoft.SqlServer.Management.Smo.Scripter') ($s) 

     $scripter.Options.AnsiFile = $true 
     $scripter.Options.IncludeHeaders = $false 
     $scripter.Options.ScriptOwner = $false 
     $scripter.Options.AppendToFile = $false 
     $scripter.Options.AllowSystemobjects = $false 
     $scripter.Options.ScriptDrops = $false 
     $scripter.Options.WithDependencies = $false 
     $scripter.Options.SchemaQualify = $false 
     $scripter.Options.SchemaQualifyForeignKeysReferences = $false 
     $scripter.Options.ScriptBatchTerminator = $false 

     $scripter.Options.Indexes = $true 
     $scripter.Options.ClusteredIndexes = $true 
     $scripter.Options.NonClusteredIndexes = $true 
     $scripter.Options.NoCollation = $true 

     $scripter.Options.DriAll = $true 
     $scripter.Options.DriIncludeSystemNames = $false 

     $scripter.Options.ToFileOnly = $true 
     $scripter.Options.Permissions = $true 

     foreach ($o in $objects | where {!($_.IsSystemObject)}) 
     { 
      $typeFolder=$o.GetType().Name 

      if (!(Test-Path -Path "$savepath\$typeFolder")) 
       { New-Item -Type Directory -name "$typeFolder"-path "$savePath" | Out-Null } 

      $file = $o -replace "\[|\]" 
      $file = $file.Replace("dbo.", "") 

      $scripter.Options.FileName = "$savePath\$typeFolder\$file.sql" 
      $scripter.Script($o) 
     } 
    } 

    catch 
    { 
     Write-Error "`t`t$($MyInvocation.InvocationName): $_" 
    } 
} 

# repeat line for each database/server to be pushed to version control 
SQL-Script-Database C:\Users\UserName\DbObjDef\FolderName DatabaseName ServerName 

cd C:\Users\UserName\DbObjDef 
git add . 
git commit -m "nightly diff" 
git push -u origin master 
Смежные вопросы