上面代码只能查询单个数据库的表,我希望能在一个数据库查询到不同服务器,不同数据库的表存在不存在
时间: 2024-04-16 18:26:32 浏览: 71
如果你希望在一个数据库中查询不同服务器和不同数据库的表的存在与否,你可以使用 SQL Server 的链接服务器(linked server)功能来实现。链接服务器允许你访问其他 SQL Server 实例或其他数据库引擎的数据。
首先,你需要创建链接服务器,将其他服务器添加为链接服务器。以下是一个示例代码,假设你要将名为 `RemoteServer` 的远程服务器添加为链接服务器:
```sql
EXEC sp_addlinkedserver
@server = 'RemoteServer',
@srvproduct = 'SQL Server';
```
接下来,你需要配置链接服务器的登录凭据。这里假设你使用 SQL Server 身份验证,并提供了用户名和密码:
```sql
EXEC sp_addlinkedsrvlogin
@rmtsrvname = 'RemoteServer',
@useself = 'false',
@locallogin = NULL,
@rmtuser = 'remote_username',
@rmtpassword = 'remote_password';
```
然后,你可以使用链接服务器来查询其他服务器和数据库的表。以下是一个示例代码,在循环中检查表的存在与否并更新 `table_sum` 表:
```sql
DECLARE @shujuku VARCHAR(100)
DECLARE @tablename VARCHAR(100)
DECLARE @note VARCHAR(100)
DECLARE @id INT
DECLARE @count INT
SET @count = 1
WHILE @count <= (SELECT COUNT(*) FROM table_61)
BEGIN
SELECT @shujuku = shujuku, @tablename = tablename, @note = note, @id = id
FROM (
SELECT ROW_NUMBER() OVER (ORDER BY id) AS RowNum, shujuku, tablename, note, id
FROM table_61
) AS t
WHERE RowNum = @count
DECLARE @sql NVARCHAR(MAX)
SET @sql = 'IF NOT EXISTS (SELECT 1 FROM RemoteServer.' + @shujuku + '.sys.tables WHERE name = ''' + @tablename + ''')
UPDATE table_sum
SET note = ''表不存在''
WHERE shujuku = ''' + @shujuku + '''
AND tablename = ''' + @tablename + ''''
EXEC sp_executesql @sql
SET @count = @count + 1
END
```
上述代码通过在查询中使用链接服务器的形式,动态构建了查询语句,从而在循环中检查其他服务器和数据库中的表的存在与否,并更新 `table_sum` 表。
请注意,上述代码仅提供了一个示例,实际使用时需要根据具体情况进行适当的修改,并根据链接服务器的配置和目标服务器的数据库结构来编写查询语句。
阅读全文
相关推荐


















