我在不同的服务器上有多个数据库,我想从表中获取一些信息(例如用户 - 这个表在所有数据库上)。所以我在游标上添加所有服务器和数据库,然后运行这个脚本:
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
如果有人知道我错过了什么或知道另一个解决方案。
答案 0 :(得分:0)
为所有不同的服务器创建Linked Server objects,将所有相关数据提取到工作服务器上,然后从那里查询数据。
根据上面的链接,您可以通过在对象资源管理器中展开Server Objects
,右键单击Linked Servers
,然后填写相应的连接信息,在SSMS中执行此操作。
如果它们都是基于SQL Server的,您可以使用[Server].[Database].[Schema].[Table]
表示法查询它们,如果不是,则需要使用OPENQUERY
。