Sql server 在数据库中搜索具有特定值的所有列名
我们有一个特定于供应商的应用程序,它有100个表,其中大多数表都有一个名为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
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