是否可以将SqlServer localDB从2012升级到2014年?
我们目前使用的是SQL Server 2012的版本11.我需要从SQL Server 2014升级到版本12.
我希望能够在不丢失表格和数据的情况下完成。
我安装了一个新的localDB但是我没有我的数据。它还有另一个名称,我无法真正更改配置文件,因为它是一个团队项目。
我尝试使用命令行sqlLocalDB工具创建一个名为v11.0的2014版本,但它在旧的2012版本中以任何方式创建它。
C:\Program Files\Microsoft SQL Server\120\Tools\Binn>sqllocaldb create v11.0
LocalDB instance "v11.0" created with version 11.0.3000.0.
C:\Program Files\Microsoft SQL Server\120\Tools\Binn>sqllocaldb create v12.0
LocalDB instance "v12.0" created with version 12.0.2000.8.
C:\Program Files\Microsoft SQL Server\120\Tools\Binn>sqllocaldb create aaaaa
LocalDB instance "aaaaa" created with version 12.0.2000.8.
为什么命名v11.0会改变使用哪个版本?
如何升级现有的v11.0?
答案 0 :(得分:15)
正如MSDN(Not too well chosen title...)中的链接中所述,只需双击.mdf文件就可以触发转换...这种情况在我的情况下没有发生(也许是因为有必要Sql Server Management Studio软件或类似的东西是真实的。)
所以,这是一个替代程序:
在Visual Studio中打开“服务器资源管理器”
点击左上角的“连接数据库”图标
在列表中选择“Microsoft SQL Server”,然后按“下一步”
将其写为服务器名称:(LocalDB)\ MSSQLLocalDB
在下面的选项中选择“附加数据库文件”,在浏览器中选择.mdf文件
继续,这应显示一个对话框,要求您触发转换
就是这样。根本不是很直观,但有效。除了前面提到的te链接之外,我还没有找到任何文档,所有其他步骤都是纯粹的直觉,但对我有用,我也希望你。
答案 1 :(得分:6)
要定位特定版本的LocalDb,请使用12.0或11.0作为参数。例如:
sqllocaldb create "mydb" 12.0
您的命令失败的原因是您错误地引用了该版本。这一点在 - ?资讯
使用“v12.0”作为第一个参数仅设置实例名称。如果没有给出第二个版本参数,则使用默认版本。
答案 2 :(得分:1)
似乎v11.0
是LocalDB 2012 自动实例的特殊名称。它与此版本严格相关。虽然2014年和2016年版本为此目的共享相同的MSSQLLocalDB
名称。
答案 3 :(得分:1)
这是我所做的,因为Visual Studio 2019仍随附Microsoft SQL Server 2016 (13.1.4001.0) LocalDB
。
我需要这样做,因为我尝试添加Temporal tables
并失败了级联删除。
无法执行DbCommand(31毫秒)[Parameters = [],CommandType ='Text', CommandTimeout = '30'] ALTER TABLE文本设置(SYSTEM_VERSIONING = ON (HISTORY_TABLE = History.Text));
将SYSTEM_VERSIONING设置为ON失败,因为表 'Project.Repository.dbo.Text'具有带级联DELETE的FOREIGN KEY 或更新。
仔细阅读后,发现此错误仅影响SQL Server 2016,而不影响2017和更高版本。
ON DELETE CASCADE和ON UPDATE CASCADE不允许在 当前表。换句话说,当时态表正在引用时 表中的外键关系(对应 sys.foreign_keys中的parent_object_id)不允许使用CASCADE选项。 要变通解决此限制,使用应用程序逻辑或之后 触发以维护主键表中删除操作的一致性 (对应于sys.foreign_keys中的referenced_object_id)。如果 主键表是临时表,引用表是非临时表, 没有这样的限制。
此限制仅适用于SQL Server 2016。 CASCADE选项是 从CTP 2.0开始在SQL数据库和SQL Server 2017中受支持。
https://stackoverflow.com/a/54591579/3850405
您可以通过在Powershell中运行命令sqllocaldb info
来获取有关当前localDB的信息。
这是一个很好的升级指南,但是我选择做一些不同的事情。
https://medium.com/cloudnimble/upgrade-visual-studio-2019s-localdb-to-sql-2019-da9da71c8ed6
下载SQL Server Express 2019 LocalDB
或更高版本并运行exe。
选择下载媒体:
LocalDB:
从下载的exe安装:
我的建议是在此之后重新启动计算机,但是我不确定是否需要它。反正我做到了。
检查sqllocaldb versions
对我造成了Windows API call "RegGetValueW" returned error code: 0.
异常。
使用以下答案解决了它:
https://stackoverflow.com/a/58275480/3850405
这是Registry Editor
(regedit)在不起作用的示例中的样子:
更改文件夹名称后,一切正常:
此操作之后备份当前localdb中的数据库。可能不需要这样做,因为稍后我们会将所有数据库从当前localdb附加到新版本,但是如果您有敏感数据,建议这样做。
我有Visual Studio的标准名称MSSQLLocalDB
,因此我的示例将使用此名称。如前所述,您可以使用sqllocaldb info
命令查看当前版本。
从powershell运行以下三个命令:
sqllocaldb stop mssqllocaldb
sqllocaldb delete mssqllocaldb
sqllocaldb create MSSQLLocalDB
如果一切正常,最后一条命令应生成类似LocalDB instance "mssqllocaldb" created with version 15.0.2000.5.
然后通过SSMS (localdb)\mssqllocaldb
或类似程序登录到新的LocalDB,并附加旧数据库。通常存储在%UserProfile%
文件夹中。
LocalDB现在已更新,希望您的所有数据库都能正常工作。
答案 4 :(得分:0)
升级SQL Server LocalDb实例的一种简单方法是从%LocalAppData%\Microsoft\Microsoft SQL Server Local DB\Instances\
目录中删除实例数据目录。下次使用该实例时,将使用最新安装的版本重新创建该实例。
答案 5 :(得分:0)
我还要在 @Ogglas
的回答中补充一点,如果您想在您的软件中自动迁移它,您可以按照以下步骤操作。
升级时执行以下步骤(升级步骤或升级代码):
use {dbName}; SELECT physical_name FROM sys.database_files WHERE name = '{dbName}'
sqllocaldb i your_db
或通过类似于:DECLARE @dbversion nvarchar(128)
SET @dbversion = CAST(serverproperty('ProductVersion') AS nvarchar)
SET @dbversion = SUBSTRING(@dbversion, 1, CHARINDEX('.', @dbversion) - 1)
SELECT @dbversion -- this will give you the major version (eg. 12 or whatever is your old version)
...
sqllocaldb stop mssqllocaldb
sqllocaldb delete mssqllocaldb
sqllocaldb create MSSQLLocalDB
CREATE DATABASE [{dbName}]
ON PRIMARY (NAME={dbName}, FILENAME = '{dbPath}')
for attach;
EXEC('ALTER DATABASE {db_name} SET COMPATIBILITY_LEVEL = 150'); -- or whatever version you are upgrading to