通过SQL Server pyodbc连接连接到关联服务器?

1 人关注

我目前可以连接到我的SQL服务器并直接查询任何我想查询的数据库。

问题是当我想查询一个链接服务器时。我不能在 connect() 方法中直接引用链接服务器的名称,我必须先连接到一个本地数据库,然后针对链接服务器运行 OPENQUERY()

这似乎是一个奇怪的解决方法。有没有一种方法可以直接查询链接的服务器? (根据我的研究,你不能直接连接到一个链接的服务器。) 或者至少在不指定数据库的情况下连接到服务器,然后我可以运行 OPENQUERY() ,而不必先连接到数据库?

我目前要做的事情的例子。

import pyodbc
ex_value = "SELECT * FROM OPENQUERY(LinkedServerName,'SELECT * FROM LinkedServerName.SomeTable')"
# I have to connect to some local database on the server and cannot connect to linked server initially.
odbc_driver, server, db = '{ODBC Driver 17 for SQL Server}', 'MyServerName', 'LocalDatabase'
with pyodbc.connect(driver=odbc_driver, host=server, database=db, trusted_connection='yes') as conn:
    conn.autocommit = False
    cursor = conn.cursor()
    cursor.execute(ex_value)
    tables = cursor.fetchall()
    for row in tables:
        print('Row: {}'.format(row))
    cursor.close()
    
4 个评论
链接服务器不是一个数据库或一个sql服务器。它是一个服务器对象,允许你查询远程数据库。所以,是的,你正在做的就是你必须做的。或者当你只想要这些数据时,直接连接到远程服务器。直接到源头的性能会更好,而不是通过链接服务器的额外跳转。
@SeanLange 我不能直接连接到链接的服务器,因为我正在建立一个供许多人使用的应用程序,我们不想管理100多个用户证书。我们在SQL服务器上有机器ID,与windows认证相联系,所以我们只需要在SQL服务器内管理用户组。如果我现在所做的是我唯一的选择,我想这是好的。我将创建一个假的数据库,里面没有任何东西可以连接到它。
鉴于这种情况,这可能是最好的行动方案。
@SeanLange 我想可能是这样,但人们可以希望有更好的解决办法 :D.谢谢你提供的信息。
python
sql-server
odbc
pyodbc
Mike - SMT
Mike - SMT
发布于 2019-10-30
1 个回答
Greg Low
Greg Low
发布于 2019-10-30
已采纳
0 人赞同

正如Sean所提到的,一个链接的服务器只是对另一个服务器的引用,它被存储在本地服务器中。