gpt4 book ai didi

sql - 在 SQL Server 的多个数据库中搜索列名

转载 作者:搜寻专家 更新时间:2023-10-30 20:08:22 25 4
gpt4 key购买 nike

我需要在位于同一 SQL Server 2008 上的许多数据库中找到特定的列。我在 Internet 上尝试了很多解决方案,但没有一个适用于系统数据库。扩展搜索以查看一台服务器上所有数据库的最佳方式是什么?

最佳答案

像这样尝试:

此解决方案使用 SP sp_MSforeachdb。此 SP 允许您对所有现有数据库使用相同的语句。问号代表实际数据库名称的占位符。

因为我们需要在一个表中获得结果,所以我先声明一个表并使用 INSERT INTO SomeTable EXEC SomeSP-syntax 将 SP 的结果插入到合适的表中(-变量):

注意 此 SP 以跳过某些表格而闻名。 Here's a thread to read more about this (including a solution for one special case) .

DECLARE @ColumnName VARCHAR(100)='SomeColumnName';

DECLARE @Command VARCHAR(MAX)='USE [?]; SELECT TABLE_CATALOG
,TABLE_SCHEMA
,TABLE_NAME
,COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME=''' + @ColumnName + ''';';

DECLARE @tbl TABLE(
TABLE_CATALOG VARCHAR(100)
,TABLE_SCHEMA VARCHAR(100)
,TABLE_NAME VARCHAR(100)
,COLUMN_NAME VARCHAR(100)
);

INSERT INTO @tbl
EXECUTE master.sys.sp_MSforeachdb @Command

SELECT * FROM @tbl;

更新另一种没有 sp_MSforeachdb 的方法

DECLARE @ColumnName VARCHAR(100)='SomeColumnName';

DECLARE @Template VARCHAR(MAX)='USE ***; SELECT TABLE_CATALOG,TABLE_SCHEMA,TABLE_NAME,COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME=''' + @ColumnName + ''';';

DECLARE @Command VARCHAR(MAX)=
(
SELECT REPLACE(@Template,'***', QUOTENAME(name))
FROM sys.databases
FOR XML PATH('')
);

DECLARE @tbl TABLE(
TABLE_CATALOG VARCHAR(100)
,TABLE_SCHEMA VARCHAR(100)
,TABLE_NAME VARCHAR(100)
,COLUMN_NAME VARCHAR(100)
);

INSERT INTO @tbl
EXEC (@Command);

SELECT * FROM @tbl

关于sql - 在 SQL Server 的多个数据库中搜索列名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41231491/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com