我安装了SSDT的VS2015,以及SSMS和SqlServer 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)卸载它以便可以重新安装?
顺便说一句,我我能够使用32位SQLCMD.exe使用Active Directory Authenticatoin,所以我知道32位dll工作正常。这只是64位的dll没有正确加载......
答案 0 :(得分:27)
所以,这个问题也让我很烦恼。我不清楚它是如何发生的,但也许只是在我安装最新版本的SSMS时发生的巧合。我的解决方法是:
导航到“添加或删除程序”
在小搜索窗口中键入sql,或者直接找到:" SQL Server的Active Directory身份验证库"。
注意:这不会出现在Windows'如果已安装Visual Studio 2019,则安装程序列表。您可以通过从命令提示符调用
MsiExec.exe /I{6BF11ECE-3CE8-4FBA-991A-1F55AA6BE5BF}
来运行相同的安装程序。
卸载那个小家伙
在此处导航并下载最新的ADAL库(选择x64):
https://www.microsoft.com/en-us/download/confirmation.aspx?id=48742
只是为了踢,重启
你的东西现在应该正确加载adalsql.dll!
答案 1 :(得分:6)
确保您实际上已经安装了ADAL(C:\Windows\system32\adal.dll
的存在很丰富)
将其粘贴到.reg文件中:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSADALSQL]
"TargetDir"="C:\\Windows\\System32\\adal.dll"
双击.reg文件以安装该值
您完成了。去庆祝吧!
发生此错误是因为SQL Server的.NET适配器找不到adal.dll。但是为什么呢?它已经安装了吧?
好吧,最新版ADAL(与VS 2019打包在一起,以及SQL Serer Management Studio的最新版本)的安装程序为DLL的32位版本(位于C:\Windows\SysWOW64\adal.dll
)添加了一个注册表项,但是不会添加64位版本(已安装到C:\Windows\system32\adal.dll
)的条目。如果以32位模式构建和运行应用程序,则永远不会看到此错误清单。
这只是ADAL安装程序中的错误。大概是Microsoft没检测到它,因为 Visual Studio和SSMS都是32位应用程序,因此不要去寻找64位版本。
答案 2 :(得分:2)
在我看来,罪魁祸首是VS 2019。 它具有较新版本的ADALSQL软件包。对我来说,它位于路径“ C:\ ProgramData \ Microsoft \ VisualStudio \ Packages \ sql_adalsql,version = 16.0.61903.25110,chip = x64,language = zh-CN”,我已卸载并安装了所需版本来解决此问题。 / p>
希望这会有所帮助!
答案 3 :(得分:1)
就我而言,添加/删除程序未显示“ Active Directory身份验证库”的任何已安装实例。但是,尝试安装library可能会失败,表明安装了新版本。
我通过打开注册表编辑器(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,终于能够“卸载”。之后,从上面的“库”链接运行安装程序终于可以了。
答案 4 :(得分:-1)
或者,如果您计划暂时升级SSMS,只需卸载" SQL Server"的Active Directory身份验证库,然后修复SSMS。
下次升级SSMS时,它不会破坏任何东西。 SSMS带来了自己的adalsql.dll,并且在升级SSMS时知道如何升级它。但是,如果您使用其他东西(或使用https://www.microsoft.com/en-us/download/confirmation.aspx?id=48742)安装了adalsql,那么SSMS就会被破坏。