In (transact-sql)

Высокий уровень доступности реляционной СУБД

Компонент Enterprise Standard Интернет Express сдополнительными службами Экспресс-оценка
Поддержка ядра сервера1 Да Да Да Да Да
доставка журналов; Да Да Да Нет Нет
Зеркальное отображение базы данных Да Да2 Да3 Да3 Да3
Сжатие резервных копий Да Да Нет Нет нет
Моментальный снимок базы данных Да Да Да Да Да
Экземпляры отказоустойчивого кластера Always On4 Да Да Нет Нет Нет
Группы доступности Always On5 Да Нет Нет Нет Нет
Основные группы доступности6 Нет Да Нет Нет Нет
Автоматическое перенаправление подключения для чтения и записи Да Нет Нет Нет нет
Восстановление страниц и файлов в режиме «в сети» Да Нет Нет Нет Нет
Создание и перестроение индекса в режиме «в сети» Да Нет Нет Нет нет
Возобновляемая перестройка индексов в подключенном режиме Да Нет Нет Нет нет
Изменение схемы в режиме «в сети» Да Нет Нет Нет нет
Быстрое восстановление Да Нет Нет Нет Нет
Ускоренное восстановление базы данных Да Да Да Нет нет
Зеркальные резервные копии Да Нет Нет Нет нет
Поддержка памяти и ЦП с «горячей» заменой Да Нет Нет Нет Нет
Помощник по восстановлению базы данных Да Да Да Да Да
Зашифрованная резервная копия Да Да Нет Нет Нет
Гибридное резервное копирование в Microsoft Azure (резервное копирование на URL-адрес) Да Да Да Нет Нет
Группа доступности без кластера 5, 6 Да Да Нет Нет Нет
Отказоустойчивые серверы для аварийного восстановления7 Да Да Нет Нет Нет
Отказоустойчивые серверы для высокого уровня доступности7 Да Да Нет Нет Нет
Отказоустойчивые серверы для аварийного восстановления в Azure7 Да Да Нет Нет Нет

2 Только полная безопасность.

3 Только следящий сервер.

4 В выпуске Enterprise количество узлов равно максимуму, поддерживаемому операционной системой. В выпуске Standard поддерживается два узла.

5 В выпуске Enterprise поддерживается до 8 вторичных реплик, включая 5 синхронных вторичных реплик.

6 В выпуске Standard поддерживаются базовые группы доступности. Базовая группа доступности поддерживает две реплики с одной базой данных. Дополнительные сведения о базовых группах доступности см. в разделе Базовые группы доступности.

7 Требуется Software Assurance.

Ресурсы SQL Server

  • Блоги
    • SQL Central Blog Scripts
    • SQL Central Blog Articles
    • SQL Central Blog Stairways
    • MSSQLTips
    • BRENT OZAR scripts, videos and articles
    • Simple-talk Articles
    • SQLSentry Blog
    • Glenn Berry’s SQL Server Performance
    • Kenneth Fisher SQLStudies Blog
    • Best SQL Server Perfomance Blog
    • Weblogs SQLTeam Blogs
    • SQLMag
    • SQLShack
    • SQLPass
    • Vertabelo Blog
    • Midnightdba Blog
    • Madeiradata Blog
    • SQL Server Performance Articles
    • SQL and more with KRUTI Blog
    • SQL Authority
    • TECHNET SQL Server Blog
    • SQL Server Database Engine Blog
    • SQL Server BI Blog
    • Andy Yun SQLBeck Blog
    • Curated SQL
    • Blog do Ezequiel
    • SQLHA Blog
    • SQLSecurity Blog
    • SQL.ru SQL Server (Русский)
  • Безопасность (огромное спасибо Troy Hunt)
    • SQL injection
      • sqlmap – Инструмент для мониторинга SQL injection тестовых атак для работающего сайта
      • Drupal 7 SQL injection flaw of 2014
      • Ethical Hacking: SQL Injection – Подробрный курс по SQL Injection (Платно)
    • Exploit databases and breach coverage
      • seclists.org – Подборка уязвимостей с разных ресурсов
      • Exploit Database – Солидная подборка уязвимостей баз данных
      • PunkSPIDER – Большой список уязвимостей всех типов для веб ресурсов
      • Data Loss DB – Хороший список уязвимостей для баз данных
      • Information is Beautiful: World’s Biggest Data Breaches – Интересная географическая визуализация произошедших уязвимостей
  • Бесплатные видео
    • IDERA Resource Center
    • MSSQLTips SQL Server Webcasts and Videos
    • SQL Server Videos
    • TECHNET How do I Videos
    • Veeam Learn Microsoft SQL Server
    • MidnightDBA ITBookWorm Video
    • SQL Server Hangouts (by Boris Hristov, Cathrine Wilhelmsen)
    • Youtube russianVC (Русский)
  • Бесплатные подкасты (на английском)
    • SQL Server Radio (by Guy Glantser and Matan Yungman)
    • SQL Data Partners (by Carlos L Chacon, César Oviedo and Adrian Miranda)
    • Away from the Keyboard (by Cecil Phillip and Richie Rump)
    • RunAs Radio (by Richard Campbell and Greg Hughes)
    • People Talking Tech (by Denny Cherry)
    • NET Rocks! (by Richard Campbell and Carl Franklin)
    • SQL Down Under Podcast (by Greg Low)
    • Free sql server video tutorials for beginners (by PRAGIM Technologies)
  • Курсы
    • Бесплатные
      • Codecademy Learn SQL (Бесплатно)
      • Codecademy SQL: Table Transformation (Бесплатно)
      • Codecademy SQL: Analyzing Business Metrics (Бесплатно)
      • MVA SQL Server Courses (Бесплатно)
    • Платные
      • Lynda Courses (Платно)
      • Veeam Free Courses (Платно)
      • SQLSkills Trainings (Платно)
      • Brent Ozar Team Trainings (Платно)
      • Pluralsight Courses (Платно)
  • Обратная Совместимость
    • 2016 Backwards Compatibility
    • 2014 Backwards Compatibility
    • 2012 Backwards Compatibility
    • 2008 R2 Backwards Compatibility
    • 2008 Backwards Compatibility
    • 2005 Backwards Compatibility
  • Другое
    • SQL Server Management Studio
    • Лучшее решение для бэкапов и управления индексами Ola Maintenance Solution
    • SQL Server First Responder Kit
    • SQL# CLR functions (by Sql Quantum Leap)
    • SSIS Performance Benchmarks
    • Statistic Parser (by Richie Rump)
    • Using Excel to parse Set Statistics IO output (by Vicky Harp)
    • SQL Generator (by Richie Rump)
    • Columnstore Indexes Scripts Library (by Niko Neugebauer)
    • Stackoverflow SQL Server
    • DBA Stackexchange SQL Server
    • BIMLScript Learn resource
    • SQL Server Connection Strings
    • SQL Injection Cheat Sheet (by Ferruh Mavituna)
    • RSS Most Recent SQL Server KBs
    • Stackoverflow SQL Anti Patterns
    • SQL Server Latch Classes Library (by Paul S. Randal)
    • Azure Speed (by Blair Chen)
    • SQLFiddle
    • Practical skills of SQL language (Русский)

Описание

Программа установки LocalDB использует программу для установки необходимых файлов на компьютере. После установки LocalDB становится экземпляром SQL Server Express, который способен создавать и открывать базы данных SQL Server. Файлы системной базы данных, как правило, хранятся в каталоге AppData, который обычно скрыт. Например, . Файлы пользовательской базы данных хранятся в месте, указанном пользователем, как правило, в папке .

Дополнительные сведения о включении LocalDB в приложении см. в статье с общими сведениями о локальных данных в Visual Studio и статье о создании базы данных и добавлении таблиц в Visual Studio.

Дополнительные сведения об API LocalDB см. в разделе Справочник по SQL Server Express LocalDB.

Служебная программа позволяет создавать новые экземпляры LocalDB, запускать и останавливать работу экземпляров, а также использовать функции для управления LocalDB. Дополнительные сведения о служебной программе см. в разделе Программа SqlLocalDB.

Параметры сортировки для LocalDB заданы в и не могут быть изменены. Параметры сортировки на уровне базы данных, на уровне столбца и на уровне выражения поддерживаются обычным образом. Автономные базы данных следуют правилам метаданных и параметрам сортировки , определенным Contained Database Collations.

Ограничения

  • Невозможно применить исправление LocalDB без пакетов обновления. Накопительные пакеты обновления и обновления системы безопасности нельзя применить вручную или с помощью Центра обновления Windows, Центра обновления Windows для бизнеса или других способов.

  • Нельзя управлять LocalDB удаленно с помощью SQL Management Studio.

  • LocalDB не может быть подписчиком в репликации слиянием.

  • LocalDB не поддерживает FILESTREAM.

  • Для LocalDB разрешены только локальные очереди компонента Service Broker.

  • Экземпляр LocalDB, принадлежащий встроенным учетным записям, например , может иметь проблемы с управляемостью из-за перенаправления файловой системы Windows. Вместо этого следует использовать обычную учетную запись Windows в качестве владельца.

Автоматические и именованные экземпляры

LocalDB поддерживает два типа экземпляров: автоматические и именованные.

  • Автоматические экземпляры LocalDB являются общедоступными. Они создаются и обслуживаются автоматически и могут использоваться любым приложением. Для каждой версии LocalDB, установленной на компьютере пользователя, существует один автоматический экземпляр LocalDB. Автоматические экземпляры LocalDB обеспечивают удобное управление экземплярами. Нет необходимости создавать экземпляр. Он просто работает. Эта функция упрощает установку приложения и его перенос на другой компьютер. Если на целевом компьютере установлена указанная версия LocalDB, то там также будет доступен автоматический экземпляр LocalDB для этой версии. Автоматические экземпляры LocalDB именуются по специальному шаблону, принадлежащему зарезервированному пространству имен. Это позволяет избежать конфликтов имен с именованными экземплярами LocalDB. Автоматический экземпляр имеет имя MSSQLLocalDB.

  • Именованные экземпляры LocalDB являются закрытыми. Они принадлежат одному приложению, которое отвечает за создание экземпляра и управление им. Именованные экземпляры обеспечивают изоляцию от других экземпляров и способствуют повышению производительности за счет снижения уровня конфликта за ресурсы с другими пользователями базы данных. Пользователь должен создавать именованные экземпляры явным образом с помощью API управления LocalDB или неявным образом через файл app.config управляемого приложения (при необходимости управляемое приложение также может использовать API). Каждый именованный экземпляр LocalDB имеет связанную с ним версию LocalDB, которая указывает на соответствующий набор двоичных файлов LocalDB. Имя экземпляра LocalDB имеет тип данных sysname и может содержать до 128 символов. (в отличие от обычных именованных экземпляров SQL Server, где допускается использование только обычных имен NetBIOS из 16 символов ASCII). Имя экземпляра LocalDB может содержать любые символы Юникода, допустимые в имени файла. Именованный экземпляр, который использует имя автоматического экземпляра, становится автоматическим экземпляром.

Разные пользователи одного и того же компьютера могут иметь экземпляры с одинаковыми именами. Каждый экземпляр является отдельным процессом, который запускается от разных пользователей.

Использование инструкции EXIT для возвращения результатов программы osql

Результат выполнения инструкции SELECT можно использовать в качестве возвращаемого программой osql значения. Если тип числовой, то последний столбец последней строки результатов преобразуется в 4-байтовое целое число (long). В MS-DOS младший байт передается родительскому процессу или уровню ошибки операционной системы. Windows передает все 4-байтовое целое число. Синтаксис:

Пример:

В пакетный файл также можно включить параметр EXIT. Пример:

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

Существуют четыре формата инструкции EXIT:

EXIT

Примечание

Не выполняет пакет, немедленно завершает работу и не возвращает значение.

EXIT ()

Примечание

Выполняет пакет, завершает выполнение и не возвращает значения.

EXIT ( запрос )

Примечание

Выполняет пакет, включая запрос, затем возвращает результаты запроса и завершает работу.

RAISERROR с состоянием 127

Примечание

Если в скрипте osql используется RAISERROR и при этом возникает состояние 127, программа osql завершает выполнение и возвращает клиенту идентификатор сообщения. Пример:

Эта ошибка приведет к завершению скрипта osql , при этом клиенту будет возвращен идентификатор сообщения 50001.

Возвращаемые значения от -1 до -99 зарезервированы для SQL Server. Программа osql определяет следующие значения:

  • –100

    Перед выбором возвращаемого значения произошла ошибка.

  • –101

    При выборе возвращаемого значения не найдены строки.

  • –102

    При выборе возвращаемого значения произошла ошибка преобразования.

Результаты

Результаты возвращаются обратно в клиентскую программу по мере выполнения запроса. Как только строка «всплывёт» в дереве выполнения, самый первый оператор обычно сразу записывает ее в сетевой буфер и отправляет клиенту. Результат не «подготавливается» в каком-то промежуточном хранилище (в памяти или на диске) – вместо этого он отправляется сразу по мере получения (то есть, по мере выполнения запроса). На этом этапе, конечно, свою роль играют сетевые протоколы управления потоком. Если клиент не выбирает результат (например, не выполняет SqlDataReaded.Read()), то сетевой поток заблокирует передающую сторону, а это, в свою очередь, приостановит выполнение запроса. Запрос продолжит выполнение и вернёт следующие строки результата (то есть, продолжит выполнение плана запроса) как только сетевой стек восстановит необходимые ресурсы.

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

Поставщики и драйверы

Компонент Description
Драйверы ODBC для Microsoft SQL Server Драйверы Microsoft ODBC Driver для SQL Server поддерживают возможность подключения из Windows и Unix к Microsoft SQL Server и Базе данных SQL Microsoft Azure.
Поставщик OLE DB для DB2 в Microsoft SQL Server Поставщик Microsoft OLE DB для DB2 v5.0 поддерживает набор технологий и средств для интеграции важных данных, хранящихся в базах данных IBM DB2, с новыми решениями. Разработчики и администраторы SQL Server могут использовать этот поставщик данных со службами Integration Services, Analysis Services, репликации, Reporting Services и обработчиком распределенных запросов. См. сведения об установке поставщика данных в электронной документации по продукту (доступно в Интернете для чтения и скачивания).

Грант выделения памяти

Некоторым операторам требуется значительный объём памяти для выполнения. Оператор сортировки должен хранить все полученные данные для того, что бы отсортировать их. Hash join и hash aggregate приходится строить большие хэш-таблицы в процессе своего выполнения.

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

В ситуации, когда несколько тяжелых запросов выполняются одновременно, они могут исчерпать всю память, доступную системе. Для предотвращения таких ситуаций SQL Server использует так называемый «семафор ресурсов». Такой механизм гарантирует, что сумма всех грантов памяти, выделенных для выполняемых запросов, не превысит общий объем памяти, доступный серверу. Если сумма всех грантов памяти все же оказывается больше объема памяти сервера, тогда запросы, запрашивающие последующие гранты, вынуждены ждать, пока текущие запросы не завершатся и не отпустят свои гранты. Текущий статус грантов памяти (запрошен, выделен, и т.д.) можно увидеть в представлении sys.dm_exec_query_memory_grants. Когда запрос вынужден ждать выделения гранта памяти, создается событие Execution Warning.

Как обычно, дьявол кроется в деталях. Запросам не всегда выделяют в точности тот объём, который они запрашивали. Они могут начать выполнение с меньшем объёмам, чем запрашивали – и это нормально. Оператор уведомляется о том, что ему выдали меньше памяти и он подстраивает своё выполнение чтобы уложиться в выделенный грант. Может случиться и так, что полного запрошенного гранта оказывается недостаточно (обычно в этом виновата устаревшая статистика). В этом случае оператор вынужден «выливать» (spill) данные в tempdb. Конечно же, перенос данных на диск (сначала запись, потом чтение) гораздо медленнее работы исключительно в RAM – и для таких ситуаций есть специальные события-предупреждения:

Строго говоря, для хэшей всё еще немного сложнее: они «сбрасываются» (bail out), а не «сливаются» (spill). Подробнее это разобрано в статье с описанием события.

Больше подробностей о грантах памяти – в статье Understanding SQL server memory grant.

Память, положенная запросам, резервируется, а не выделяется. Во время выполнения запрос обращается за выделением памяти из объёма гранта – и только в этот момент память действительно потребляется запросом. Запрос может использовать меньше памяти, чем запросил (оценки памяти обычно пессимистичны и ориентируются на худшие сценарии). Память, которая была запрошена, но не была использована, отдается под нужды кэширования данных (этим занимается Buffer pool). Тем не менее, большие гранты, которые в итоге не были использованы, опасны тем, что мешают выполнению других запросов – им не остается памяти для своих грантов из-за ограничений ресурсного семафора.

В какой-то степени схожая проблема может возникнуть из-за семафора ресурсов для компиляции запросов. Эта «калитка» (gate) схожа с «калиткой» при выполнении запроса, но относится к этапу компиляции. Обычно здесь не должно быть проблем, потому что компиляция происходит относительно редко. Большое число запросов, заблокированных на этапе компиляции сигнализирует о проблемах с переиспользованием планов. См. Diagnosing Plan Cache Related Performance Problems and Suggested Solutions.

Ну и последнее замечание про гранты памяти. Помните, что не всем запросам требуется грант памяти. Гранты нужны только тяжелым запросам, в которых используются сортировки, широкие сканирования индексов (параллелизм) и соединения хэшем или агрегация. Если вы видите проблемы с грантами памяти в системах, где предполагается короткое время отклика (например, веб-сайты) – самое время пересмотреть архитектуру ваших данных. Большие гранты памяти допустимы в аналитических сценариях (большие запросы, где долгое время ответа ожидаемо и устраивает пользователей).

Скажите нет грубой силе

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

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

Избыточные условия для объединений

Когда вы добавляете слишком много условий для объединений, вы, по сути, предписываете SQL выбрать определенный путь. Может быть, однако, что этот путь не всегда более эффективен.

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

Если вы ищете альтернативу, подумайте об использовании предложения  . Рассмотрим следующие запросы:

SELECT state, COUNT(*) FROM Drivers WHERE state IN ('GA', 'TX') GROUP BY state ORDER BY state
SELECT state, COUNT(*) FROM Drivers GROUP BY state HAVING state IN ('GA', 'TX') ORDER BY state

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

Вы видите, что здесь речь идет не о ограничении результатов запроса, а об ограничении промежуточного количества записей в запросе.

Обратите внимание, что разница между этими двумя предложениями заключается в том, что оператор  вводит условие для отдельных строк, тогда как оператор  вводит условие агрегирования или повторных выборов, в которых один результат, такой как , , , … был создан из нескольких строк. Как видите, оценка качества, запись и переписывание запросов –непростая задача, если учесть, что они должны быть максимально эффективными

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

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

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

Установка SQL Server

Статья Описание
Мастер установки Установите SQL Server с помощью графического интерфейса мастера установки, запущенного из файла setup.exe на установочном носителе.
Командная строка Пример синтаксиса и параметров установки для запуска установки SQL Server из командной строки.
Server Core Установите SQL Server в Windows Server Core.
Параметры для средства проверки конфигурации системы Содержит обсуждение функций средства проверки конфигурации (SCC).
Файл конфигурации Образцы синтаксиса и параметров установки для запуска программы установки с помощью файла конфигурации.
SysPrep Образцы синтаксиса и параметров установки для запуска программы установки с помощью SysPrep.
Добавление компонентов в экземпляр Обновление компонентов существующего экземпляра SQL Server.
Установка отказоустойчивого кластера SQL Server Установка экземпляра отказоустойчивого кластера SQL Server.
Исправление неудавшейся установки SQL Server Восстановление поврежденной установки SQL Server.
Переименование компьютера с SQL Server Обновите системные метаданные, хранящиеся в sys.servers, после переименования узла компьютера, на котором размещен изолированный экземпляр SQL Server.
Установка обновлений для обслуживания SQL Server Установка обновлений для SQL Server.
Файлы журналов установки Просмотр и чтение ошибок в файлах журналов программы установки SQL Server.
Проверка установки Описано использование отчета обнаружения SQL для проверки того, какая версия SQL Server и какие компоненты SQL Server установлены на компьютере.

Настройка удаленного доступа для SQL Server при работе на Server Core

Чтобы настроить удаленный доступ к экземпляру SQL Server, который запускается в Windows Server Core, выполните действия, описанные ниже.

Включение удаленных подключений на экземпляре SQL Server

Чтобы разрешить удаленные соединения, выполните следующие инструкции для экземпляра Server Core в локальной программе SQLCMD.exe.

Включите и запустите службу браузера SQL Server

По умолчанию эта служба отключена. Если она отключена на экземпляре SQL Server , работающем на Server Core, то для ее включения выполните следующую команду из командной строки:

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

Создание исключений в брандмауэре Windows

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

Включите поддержку TCP/IP в экземпляре SQL Server

Протокол TCP/IP для экземпляра SQL Server в Server Core можно включить через Windows PowerShell. Выполните следующие действия.

  1. На компьютере, где запущена ОС Windows Server Core, запустите Диспетчер задач.

  2. На вкладке Приложения нажмите Создать задачу.

  3. В диалоговом окне Создание новой задачи введите sqlps.exe в поле Открыть и нажмите кнопку ОК. Это приведет к открытию окна Microsoft SQL Server Powershell.

  4. В окне Microsoft SQL Server Powershell выполните следующий скрипт, чтобы включить протокол TCP/IP:

Удаление

Набор SSMS имеет общие компоненты с другими решениями, которые останутся установленными после его удаления.

Сюда входят следующие компоненты:

  • Azure Data Studio
  • Microsoft .NET Framework 4.7.2
  • Драйвер Microsoft OLE DB для SQL Server
  • Microsoft ODBC Driver for SQL Server версии 17
  • Распространяемый компонент Microsoft Visual C++ 2013 (x86)
  • Распространяемый компонент Microsoft Visual C++ 2017 (x86)
  • Распространяемый компонент Microsoft Visual C++ 2017 (x64)
  • Microsoft Visual Studio Tools for Applications 2017

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector