Как импортировать резервную копию Azure SQL (.bacpac) в LocalDB с помощью Visual Studio?

Я предполагаю, что это будет довольно распространенный сценарий, но я не могу найти, как импортировать экспортированную базу данных Azure SQL (.bacpac) в мою LocalDB в Visual Studio 2013. Я что-то упустил или Visual Studio что-то упустил?

(Примечание: здесь есть решения, когда у вас есть студия управления SQL Server, но у меня ее нет, и я предпочитаю не устанавливать ее, если это возможно.)


person Borek Bernard    schedule 08.01.2015    source источник


Ответы (4)


Если на вашем компьютере есть эта папка C:\Program Files (x86)\Microsoft SQL Server\110\DAC\bin, вы можете запустить эту команду, чтобы восстановить файл bacpac:

.\SqlPackage.exe /Action:Import /SourceFile:"c:\temp\your.bacpac" /TargetConnectionString:"Data Source=(localdb)\v11.0;Initial Catalog=devdb; Integrated Security=true;"

Если эта папка отсутствует, вам нужно будет загрузить инструмент с сайта Microsoft.

person Simon W    schedule 09.01.2015
comment
Просто быстрый комментарий, devbd в строке подключения указывает имя базы данных, которая будет создана в LocalDB. - person Borek Bernard; 09.01.2015
comment
Я не могу пройти мимо этого сообщения: *** Ошибка импорта базы данных: не удалось импортировать пакет. Не удалось подключиться к целевому серверу. - person Rajiv; 12.03.2015
comment
Если вы выполнили полную установку Visual Studio 2015 или просто включили этот инструмент при его установке, вы найдете SqlPackage.exe по этому пути C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\Extensions\Microsoft\ SQLDB\DAC\120 - person Erick B; 16.10.2015
comment
ВАЖНО: Убедитесь, что у вас правильная версия инструмента. Изначально у меня был только SqlPackage в \Program Files (x86)\Microsoft SQL Server\110\DAC\bin\SqlPackage.exe, который не удалось установить для SQL Server 2014 LocalDB. Как только я установил более новую версию (120), она заработала: см. stackoverflow.com/questions/23375748/ - person Simon_Weaver; 11.03.2016
comment
В VS2015 я нахожу это под C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\Extensions\Microsoft\SQLDB\DAC\130. - person angularsen; 18.08.2016
comment
Для VS2017 мне удалось найти его в C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\Extensions\Microsoft\SQLDB\DAC\140 - person Geethanga; 31.01.2018
comment
Достаточно глупо, но я получаю, что операция импорта требует значения для параметра TargetDatabaseName. если я укажу {TargetConnectionString}, а аргумент TargetConnectionString нельзя использовать в сочетании с любыми другими аргументами целевой базы данных, если я также установлю параметр /tdn - person d.popov; 09.02.2021

Для меня правильная команда для использования была:

.\SqlPackage.exe /Action:Import /SourceFile:"c:\temp\your.bacpac" /TargetConnectionString:"Data Source=(localdb)\mssqllocaldb;Initial Catalog=DBNAME;Integrated Security=true;"

В противном случае я бы получил ошибку: *** Error importing database:Could not import package. Unable to connect to master or target server 'DBNAME'. You must have a user with the same password in master or target server 'DBNAME'.

Используя VS2015, в месте, указанном anjdreas:

C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\Extensions\Microsoft\SQLDB\DAC\130

person teocomi    schedule 10.04.2017
comment
Спасибо за путь к файлам VS2015. - person angularsen; 16.06.2017
comment
VS2017: C:\Program Files (x86)\Microsoft Visual Studio 15.0\Common7\IDE\Extensions\Microsoft\SQLDB\DAC\130 - person Edward Olamisan; 30.07.2017
comment
Это сработало! Для дополнительной ясности: 1) Замените DBNAME фактическим именем, которое вы хотите. 2) В папке, которую вы ищете (...DAC\130\ в приведенном выше примере), должен быть файл 'sqlpackage.exe', который и будет запускаться. 3) Чтобы запустить это, откройте папку с этим файлом в проводнике, нажмите «Файл» и «Открыть Windows Powershell». Затем вставьте свою версию строки. У меня работал следующий путь: C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\Extensions\Microsoft\SQLDB\DAC\140. Вы можете искать местоположения в папке VS в поисках sqlpackage.exe. - person Nicholas Petersen; 23.08.2018
comment
Часть после Data Source=(localdb)\ менялась с течением времени, и, по крайней мере, прямо сейчас, это Data Source=(localdb)\mssqllocaldb... Должно быть нормально для большинства людей, поскольку я помню, что это изменение было примерно во временных рамках VS2017. ... - person Auri Rahimzadeh; 27.10.2019

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

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

Тогда вы можете просто запустить: sqlpackage из любого места! Чтобы проверить после добавления, просто откройте командную строку или powershell из любой папки и введите sqlpackage, и вы должны получить что-то вроде этого (не забудьте сначала закрыть все ранее открытые приглашения, чтобы они могли получить изменения):

запуск ‹code›sqlpackage‹/code› из любого места

Полный скрипт тогда:

sqlpackage /Action:Import /SourceFile:"C:...\SOMEDBBACKUP.bacpac" /TargetConnectionString:"Источник данных=(localdb)\mssqllocaldb;Исходный каталог=bac_give_dbimport_any_name_you_want;Встроенная безопасность=true;"

Примечания:

  1. В моей установке указан исполняемый файл со всеми строчными буквами sqlpackage.exe, поэтому я использую строчные буквы sqlpackage
  2. Мой путь с VStudio 2019 на данный момент выглядит следующим образом, но вы можете поиграть с окончательным путем, чтобы найти свою/самую новую версию (я мог бы выбрать из ".../DAC/130", 140 или 150):

C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\Common7\IDE\Extensions\Microsoft\SQLDB\DAC\150\sqlpackage.exe

  1. Для имени импортированной базы данных оно не должно совпадать с исходным именем базы данных, поэтому «bac_give_dbimport_any_name_you_want» может быть любым, что вы хотите.
person Nicholas Petersen    schedule 21.05.2019

При передаче параметра /TargetConnectionString я получал ошибку

Для операции импорта требуется значение параметра TargetDatabaseName.

SqlPackage.exe кажется немного придирчивым.

Мне пришлось указать запрошенные параметры — TargetDatabaseName и TargetServerName (короткие имена tdn и tsn), и это сработало.

Финальная команда выглядит так:

.\SqlPackage.exe /Action:Import /SourceFile:"c:\temp\your.bacpac" /tdn:"C:\temp\database.mdf" /tsn:"(LocalDB)\MSSQLLocalDB"
person d.popov    schedule 09.02.2021