我想 在所有数据库 的所有表中查找所有列名。有没有可以为我做的查询?
原文由 Salman A 发布,翻译遵循 CC BY-SA 4.0 许可协议
我想 在所有数据库 的所有表中查找所有列名。有没有可以为我做的查询?
原文由 Salman A 发布,翻译遵循 CC BY-SA 4.0 许可协议
在这里,这是我在当前实例的所有数据库中搜索列名的代码:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: themah
-- Create date: 2022-10-09
-- Description: Looking for a column name in all databases in current instance, and list the db names
-- =============================================
CREATE OR ALTER PROCEDURE [dbo].[FindColumnNameInAllDatabases]
@columnNameToFind NVARCHAR (100)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
DECLARE @dbName VARCHAR(100)
DECLARE @queryEachDatabase NVARCHAR(MAX)
DECLARE dbNamesCursor CURSOR FOR
SELECT [Name]
FROM sys.databases AS d
WHERE d.name NOT IN ('master', 'tempdb', 'model', 'msdb')
OPEN dbNamesCursor
FETCH NEXT FROM dbNamesCursor INTO @dbName
WHILE (@@FETCH_STATUS = 0)
BEGIN
SET @queryEachDatabase = N'IF Exists
(SELECT 1 FROM [' + @dbName + '].[INFORMATION_SCHEMA].[Columns] WHERE [Column_Name] Like N''%' + @columnNameToFind + '%'')
BEGIN
PRINT ''' + @dbName + '''
END
'
--PRINT @queryEachDatabase
EXEC(@queryEachDatabase)
FETCH NEXT FROM dbNamesCursor INTO @dbName
END
CLOSE dbNamesCursor
DEALLOCATE dbNamesCursor
END
GO
还有一个用法示例: EXEC dbo.FindColumnNameInAllDb N'firstName'
或者另一种打印查询的有用方法是:
DECLARE @columnName NVARCHAR(100) = N'firstName'
SELECT
'SELECT * FROM [' + NAME + '].[INFORMATION_SCHEMA].[Columns] WHERE [Column_Name] Like N''%' + @columnName + '%'''
FROM [sys].[databases]
原文由 TheMah 发布,翻译遵循 CC BY-SA 4.0 许可协议
尝试这个:
使用结果列名,这将是:
或者更多细节:
编辑
这是获取所有数据库中所有列的基本示例:
编辑 SQL Server 2000 版本
编辑
根据一些评论,这里是使用
sp_MSforeachdb
的版本: