Sql server 在数据库中搜索具有特定值的所有列名

Sql server 在数据库中搜索具有特定值的所有列名,sql-server,Sql Server,我们有一个特定于供应商的应用程序,它有100个表,其中大多数表都有一个名为Company\u code的列,在该列中为每个公司存储一个值。是否可以在公司代码='TST'的位置搜索整个数据库并返回这些值?这应该可以做到: DECLARE @Value varchar(100) = 'TST'; DECLARE @script varchar(1000); CREATE TABLE ##Results (TableName VARCHAR(100) , ValueCount INT); DECLA

我们有一个特定于供应商的应用程序,它有100个表,其中大多数表都有一个名为
Company\u code
的列,在该列中为每个公司存储一个值。是否可以在
公司代码='TST'
的位置搜索整个数据库并返回这些值?

这应该可以做到:

DECLARE @Value varchar(100) = 'TST';
DECLARE @script varchar(1000);
CREATE TABLE ##Results (TableName VARCHAR(100) , ValueCount INT);

DECLARE db_cursor CURSOR FOR 

WITH cte AS
(
SELECT o.NAME AS TableName , c.name  As ColumnName
FROM sys.sysobjects o 
JOIN sys.syscolumns c on o.id = c.id 
WHERE c.name = 'COMPANY_CODE '
)
SELECT 'INSERT INTO ##Results (TableName , ValueCount) SELECT ''' + TableName + ''' , COUNT(*) FROM ' + TableName + ' WHERE ' +  ColumnName + ' = ''' + @Value + '''' AS Script
FROM cte; 

OPEN db_cursor  
FETCH NEXT FROM db_cursor INTO @script  

WHILE @@FETCH_STATUS = 0  
BEGIN  
      PRINT @script;

      EXEC (@Script);

      FETCH NEXT FROM db_cursor INTO @script 
END 

CLOSE db_cursor  
DEALLOCATE db_cursor 


SELECT * FROM ##Results WHERE ValueCount > 0 

这应该可以做到:

DECLARE @Value varchar(100) = 'TST';
DECLARE @script varchar(1000);
CREATE TABLE ##Results (TableName VARCHAR(100) , ValueCount INT);

DECLARE db_cursor CURSOR FOR 

WITH cte AS
(
SELECT o.NAME AS TableName , c.name  As ColumnName
FROM sys.sysobjects o 
JOIN sys.syscolumns c on o.id = c.id 
WHERE c.name = 'COMPANY_CODE '
)
SELECT 'INSERT INTO ##Results (TableName , ValueCount) SELECT ''' + TableName + ''' , COUNT(*) FROM ' + TableName + ' WHERE ' +  ColumnName + ' = ''' + @Value + '''' AS Script
FROM cte; 

OPEN db_cursor  
FETCH NEXT FROM db_cursor INTO @script  

WHILE @@FETCH_STATUS = 0  
BEGIN  
      PRINT @script;

      EXEC (@Script);

      FETCH NEXT FROM db_cursor INTO @script 
END 

CLOSE db_cursor  
DEALLOCATE db_cursor 


SELECT * FROM ##Results WHERE ValueCount > 0