如何在没有安装媒体的情况下卸载 SQL Server 2014 标准版?

Eri*_*rik 9 sql-server sql-server-2014

几年来,我的开发箱上安装了 SQL Server 2014 Standard 作为默认实例的副本。我在我的机器上安装了标准,因为我有一个免费的许可证,可以通过我的 MSDN 订阅使用。现在我想卸载 SQL Server 2014 并将 SQL Server 2017 Developer Edition 设为我的默认实例。我尝试通过标准的“添加/删除程序”工作流卸载 SQL Server 2014,但在询问我要卸载哪些功能后,它提示我输入包含卸载媒体的目录。不幸的是,我没有保存从 MSDN 获得的 SQL Server 2014 下载包,并且我无法再访问 MSDN。我还检查了我的 Visual Studio,但它只能返回到 SQL Server 2016。如何在没有安装媒体的情况下卸载 SQL Server 2014 Standard?


进一步的背景:

我想卸载 SQL Server 2014 的全部原因是我想使用STRING_AGGAzure SQL 数据库和 SQL Server 2017 的新功能。例如,为了更轻松地设置开发环境,我们对本地环境开发连接字符串使用点表示法我们的连接字符串是:

Data Source=.;Initial Catalog=<Database Name>;Trusted_Connection=True;Connection Timeout=30; 
Run Code Online (Sandbox Code Playgroud)

点表示法连接到默认数据库,据我所知,如果不先卸载 SQL Server 2014,我无法将 SQL Server 2017 设为默认数据库。如果我可以在不卸载 SQL Server 2014 的情况下使用点符号连接字符串连接到 SQL Server 2017,那么我也愿意接受该解决方案。

Eri*_*rik 10

我能够通过下载SQL Server 2014 评估版*来卸载我的 SQL Server 2014 实例。为了下载评估版,我必须给微软一些联系方式,然后下载两个文件。一个文件有一个.box扩展名,另一个文件有一个扩展.exe名。可执行文件似乎只是解压了 box 文件。解压 box 文件后,我通过标准的“添加/删除程序”工作流重新启动了 SQL Server 2014 卸载过程。请注意,我从未尝试安装评估版。我只是使用解压后的文件卸载了我现有的 SQL Server 2014 实例。

我选择卸载数据库组件但保留共享组件。一旦卸载过程开始请求安装媒体,我发现它会要求提供各种.msi文件。大多数情况下,它会要求一个文件名中带有“loc”的 msi 文件,然后是一个文件名中没有“loc”的 msi 文件。在我解压 box 文件的文件夹中,msi 文件的“loc”版本位于:

\1033_ENU_LP\x64\Setup\
Run Code Online (Sandbox Code Playgroud)

并且文件名中没有“loc”的文件位于:

\x64\Setup\
Run Code Online (Sandbox Code Playgroud)

卸载过程完成后,我重新启动了我的计算机,并能够安装 SQL Server 2017 Developer Edition 作为默认实例。有趣的是,在 SQL Server 2017 安装过程中,系统提示我输入 2 个 SQL Server 2014 文件的安装介质,其中一个是SQLWRITER.MSI. 我不知道这是不是因为我没有卸载 SQL Server 2014 的共享组件。 如果由于 SQL Server 2014 评估版的时间限制,这在以后给我带来了问题,我曾经卸载我的旧 SQL Server 2014 Standard Edition 我会更新这个答案。


我没有尝试的评论中提到的替代方法,但似乎它们是很好的后备措施。

  1. 我想卸载 SQL Server 2014 的全部原因是我可以使用点表示法连接到 SQL Server 2017。Scott Hodgin建议我研究一种使命名实例看起来像默认实例的技术。我没有尝试这种技术,但从它在 StackOverflow 上收集的投票来看,它确实解决了一些人的问题。

  2. Aaron Bertrand过去似乎和我处于类似的情况,并写了两篇不同的博客文章(第一篇第二篇)关于在没有任何安装/卸载媒体的情况下强制删除的方法。两篇博文基本上都使用相同的技术构建批处理文件来执行msiexec命令,该命令根据注册表中找到的 GUID 强制卸载。如果您只阅读其中一篇博客文章,我会推荐第二篇。它使用一个小的 PowerShell 脚本来构建批处理文件。虽然我个人不需要使用这种方法,但它是我的下一个选择。此外,我想给 Aaron 一个提示,让他在像我这样的普通人遇到问题之前克服痛点,并为后代记录一个很好的问题解决方案。


*:感谢Ali Razeghi在评论中提出这种方法。