【问题标题】:using sqlcmd script my linked server queries fail to connect使用 sqlcmd 脚本我的链接服务器查询无法连接
【发布时间】:2015-01-08 16:10:51
【问题描述】:

我在 SQL Server 2008 R2 中的存储过程在多个本地和多个远程数据库(通过链接服务器)上运行查询,并且当我在 SSMS 中执行它时工作正常。

当我从 sqlcmd 脚本运行相同的 exec 时,链接服务器连接失败并出现错误...

无法为链接服务器“BLAHBLAH.BLAH.BLAH.ORG”初始化 OLE DB 提供程序“SQLNCLI10”的数据源对象。

sqlcmd 调用是...

sqlcmd -U sa -P myPassword-S localhost 
       -i C:\SS_DB_TRACK\job_run_periodic_nightly.sql 
       -o C:\SS_DB_TRACK\job_run_periodic_nightly.lst

非常感谢有人能告诉我如何让sqlcmd 脚本工作。

【问题讨论】:

  • 使用 SSMS 时,您是使用“sa”登录名和密码连接到(local) / 默认实例,还是通过 Windows 身份验证?
  • 谢谢,我使用 -E 进行 Windows 身份验证,效果很好:sqlcmd -S localhost -E .....

标签: sql-server sql-server-2008-r2 linked-server sqlcmd


【解决方案1】:

您看到的差异很可能是由于在不同的安全上下文中运行所致。 sqlcmd 参数显示它以sa 登录(通常不是一个好主意)。因此,如果您在 SSMS 中看到不同的行为,那么您可能正在使用 Windows 身份验证登录到同一台服务器。如果您通过 SSMS 使用 SQL Server 身份验证作为sa 登录到该服务器,那么您应该会看到相同的错误。同样,如果您将sqlcmd 身份验证切换为-E 以获得受信任的连接(即Windows 身份验证),那么它应该可以工作(而且看起来确实有效)。如果您不希望此过程在您的安全上下文下运行,那么您需要检查链接服务器的安全设置,以了解为什么两个不同的登录名从使用链接服务器得到不同的响应。理想情况下,您会为该进程使用另一个非sa 登录,甚至可能创建一个登录(即不是sysadmin 服务器角色的成员;-) 来处理此过程。

【讨论】:

    【解决方案2】:

    尝试使用 [LinkedServerName] 代替“LinkedServerName”

    【讨论】:

    • 感谢您的反馈,但如果您在我的问题中指的是“BLAHBLAH.BLAH.BLAH.ORG”,那么您的反馈无济于事 - “BLAHBLAH.BLAH.BLAH.ORG”在错误消息不是我的查询代码。我的查询肯定在链接服务器名称周围使用了括号。同样,从 SSMS 调用时一切正常,但从 sqlcmd 脚本调用时失败。我已经尝试了一切,以管理员身份运行批处理文件等。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-13
    • 2013-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    • 1970-01-01
    相关资源
    最近更新 更多