30

我安装了带有SSDT的 VS2015 ,以及 SSMSSqlServer PowerShell 模块(包括invoke-sqlcmd命令),但是如果我尝试像这样对 Azure SQL 数据仓库执行查询:

invoke-sqlcmd  -Query "Select top 5 * from customer"  -ConnectionString "Server=tcp:my.database.windows.net,1433;Database=Customer;  Authentication=Active Directory Integrated; Encrypt=True; "

我收到以下错误:

invoke-sqlcmd : Unable to load adalsql.dll (Authentication=ActiveDirectoryIntegrated). Error code: 0x2. For more information, see
http://go.microsoft.com/fwlink/?LinkID=513072
At line:1 char:1
+ invoke-sqlcmd  -Query "Select top 5 * from vwOffer"  -ConnectionStrin ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [Invoke-Sqlcmd], SqlException
    + FullyQualifiedErrorId : SqlExectionError,Microsoft.SqlServer.Management.PowerShell.GetScriptCommand

invoke-sqlcmd :
At line:1 char:1
+ invoke-sqlcmd  -Query "Select top 5 * from vwOffer"  -ConnectionStrin ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ParserError: (:) [Invoke-Sqlcmd], ParserException
    + FullyQualifiedErrorId : ExecutionFailureException,Microsoft.SqlServer.Management.PowerShell.GetScriptComman

如果我尝试直接安装adalsql.dll,我会收到一条消息,说明A higher version already exists我可以看到两个版本的 dll 都可以在这里找到:

 C:\Windows\SysWOW64\adalsql.dll
 C:\Windows\System32\adalsql.dll

然而,invoke-sqlcmd 找不到它。知道如何 (A) 注册现有的 dll 以便 invoke-sqlcmd 可以找到它或 (B) 卸载它以便重新安装它吗?

顺便说一句,我可以将 Active Directory Authenticatoin 与 32 位 SQLCMD.exe 一起使用,所以我知道 32 位 dll 工作正常。只是 64 位 dll 没有正确加载...

4

5 回答 5

48

所以,这个问题也困扰着我。我不清楚它是如何发生的,但也许只是巧合,它发生在我安装最新版本的 SSMS 时。我的解决办法是:

  1. 导航以添加或删除程序

  2. 在小搜索窗口中输入 sql,或者直接查找:“Active Directory Authentication Library for SQL Server”。

注意:如果您已安装 Visual Studio 2019,这将不会出现在 Windows 的已安装程序列表中。您可以通过MsiExec.exe /I{6BF11ECE-3CE8-4FBA-991A-1F55AA6BE5BF}从命令提示符调用来运行相同的安装程序。

  1. 卸载那个小家伙

  2. 在此处导航并下载最新的 ADAL 库(选择 x64):
    https ://www.microsoft.com/en-us/download/confirmation.aspx?id=48742

  3. 只是为了踢,重新启动

  4. 您的东西现在应该正确加载 adalsql.dll!

更新 #3,2020-07-13:安装旧版本有效,但容易被 SSMS 和 VS2019 安装程序破坏。新版本 ADAL 不起作用的原因是它的安装程序无法添加指向 64 位版本的adal.dll. 我在下面添加了一个答案,其中包括缺少的注册表值,您可以自己添加。一旦完成,你就再也不需要跳这个舞了。- @Tullo_x86

于 2017-08-10T16:41:30.587 回答
13

这个恼人问题的令人眼花缭乱的简单解决方案

  1. 确保您确实安装了 ADAL(存在C:\Windows\system32\adal.dll很多)

  2. 将此粘贴到 .reg 文件中:

     Windows Registry Editor Version 5.00
    
     [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSADALSQL]
     "TargetDir"="C:\\Windows\\System32\\adal.dll"
    
  3. 双击 .reg 文件以安装该值

你完成了。去庆祝吧!

解释 WTF 正在进行。为什么这是必要的?

发生此错误是因为 SQL Server 的 .NET 适配器找不到 adal.dll。但这是为什么呢?安装好了对吧?

好吧,最新版本 ADAL(与 VS 2019 和最新版本 SQL Server Management Studio 一起打包)的安装程序为 32 位版本的 DLL (at C:\Windows\SysWOW64\adal.dll) 添加了一个注册表项,但没有为64 位版本(安装到C:\Windows\system32\adal.dll)。如果您在 32 位模式下构建和运行应用程序,您将永远不会看到此错误清单。

这只是 ADAL 安装程序中的一个错误。据推测,它没有被 Microsoft 检测到,因为Visual Studio 和 SSMS 都是 32 位应用程序,因此不会去寻找 64 位版本。

于 2020-07-13T20:16:56.180 回答
2

就我而言,罪魁祸首是 VS 2019。它具有更新版本的 ADALSQL 包。对我来说,它位于路径“C:\

希望这可以帮助!

于 2019-04-30T19:54:51.257 回答
2

就我而言,添加/删除程序没有显示任何已安装的“Active Directory 身份验证库”实例。然而,尝试安装会失败,说安装了更新的版本。

我通过打开注册表编辑器 (regedt32) 并使用来自

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer

寻找adalsql

包含键很受欢迎

DisplayName: Active Directory Authentication Library for SQL Server
DisplayVersion: 15.0.1300.359

以及重要的相关安装程序的路径。对我来说,就像c:\windows\installer\4c334521.msi. 我运行了那个 msi,终于能够“卸载”。之后,从上面的“库”链接运行安装程序终于奏效了。

于 2019-05-03T22:57:17.867 回答
-1

Or you if planned to upgrade SSMS in the time being, simply uninstall "Active Directory Authentication Library for SQL Server", and repair SSMS.

Next time you upgrade SSMS it won't broke anything. SSMS bring his own adalsql.dll, and know how to upgrade it when you upgrade SSMS. But if you had installed adalsql with something else (or using https://www.microsoft.com/en-us/download/confirmation.aspx?id=48742 ), SSMS is somehow broken.

于 2018-05-30T15:53:19.763 回答