【问题标题】:Connect to multiple DB's from different servers从不同的服务器连接到多个数据库
【发布时间】:2017-02-26 09:01:18
【问题描述】:

我在不同的服务器上有多个数据库,我想从一个表中获取一些信息(例如用户-这个表在所有数据库上)。所以我在游标上添加所有服务器和数据库,然后运行这个脚本:

BEGIN

fetch next from CursorData into @DBName,@DBServer

set @cmd=':Connect ' + @DBServer+ CHAR(10) + CHAR(13)+ 'use ['+@DBName+'] select * from [UserAccount] where userid='''+@UserID+'''' + CHAR(10) + CHAR(13)+  'GO'

  print @cmd

exec sp_executeSQL @cmd

END

我有以下错误:

(1 row(s) affected)

:Connect DBServer
use [DBName] select * from [UserAccount] where userid='myuserid'
GO

Msg 102, Level 15, State 1, Line 1
Incorrect syntax near ':'.

Msg 911, Level 16, State 1, Line 2
Database 'DBName' does not exist. Make sure that the name is entered correctly.

为了在服务器之间切换,我使用了 sqlcmd 模式,但我不知道当我将它放入一个字符串然后执行字符串时是否有效。

如果,我在sqlcmd模式下执行这个命令工作:

:Connect DBServer
use [DBName] select * from [UserAccount] where userid='myuserid'
GO

如果有人知道我错过了什么或知道其他解决方案。

【问题讨论】:

    标签: sql-server tsql ssms sqlcmd


    【解决方案1】:

    为您所有不同的服务器创建Linked Server objects,将所有相关数据拉入您的工作服务器,然后从那里查询数据。

    根据上面的链接,您可以在 SSMS 中执行此操作,方法是在对象资源管理器中展开 Server Objects,右键单击 Linked Servers,然后填写适当的连接信息。

    如果它们都是基于 SQL Server 的,您可以使用 [Server].[Database].[Schema].[Table] 表示法查询它们,如果不是,则需要使用 OPENQUERY

    【讨论】:

    • 我必须找到除了链接服务器之外的解决方案。 DBA 想写一个脚本或类似的东西来解决这个问题。
    • @SilviuS 链接服务器有什么问题?您是否考虑过在 SQLCMD 中使用变量:dba.stackexchange.com/questions/111339/…
    • 对我来说这个解决方案没有错。我有一个无法创建链接服务器对象的角色(我不允许),这就是我尝试寻找另一个解决方案的原因
    • @SilviuS 您的 SQLCMD 的语法是否适合 sp_executesql 执行?我可以在网上找到的示例格式为N'''sqlcmd -E -S ' + @@servername + ' -w 1000 /Q "' + @query + '"''' 或类似格式,因为看起来sp_executesql 不会在CMD Mode 中执行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-26
    相关资源
    最近更新 更多