![有没有办法可以使用 SQL Server 管理工作室来查找列名包含特定子字符串的所有列?](https://linux22.com/image/565999/%E6%9C%89%E6%B2%A1%E6%9C%89%E5%8A%9E%E6%B3%95%E5%8F%AF%E4%BB%A5%E4%BD%BF%E7%94%A8%20SQL%20Server%20%E7%AE%A1%E7%90%86%E5%B7%A5%E4%BD%9C%E5%AE%A4%E6%9D%A5%E6%9F%A5%E6%89%BE%E5%88%97%E5%90%8D%E5%8C%85%E5%90%AB%E7%89%B9%E5%AE%9A%E5%AD%90%E5%AD%97%E7%AC%A6%E4%B8%B2%E7%9A%84%E6%89%80%E6%9C%89%E5%88%97%EF%BC%9F.png)
我正在使用 SQL 服务器管理工作室 2008。
我有一个包含数千列的大型遗留数据库。如果我可以搜索名称包含特定子字符串的所有列,那就太好了。
有谁知道如何做到这一点?
谢谢!
答案1
嗯你可以尝试:
use <your_database>
select o.name,c.name
from sys.columns c inner join sys.objects o on c.object_id=o.object_id
and o.type = 'U'
and CHARINDEX('<your_sub_string>', c.name)>=1
答案2
您可以使用一些第三方工具,例如 Red-Gate 的SQL 搜索都是免费的。
答案3
您可以使用 INFORMATION_SCHEMA 视图。
USE <database>
SELECT COLUMN_NAME
, TABLE_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME LIKE '%<string you are looking for>%'
要注意的是确保使用正确的数据库。
答案4
USE <database>;
Declare @Col varchar(10);
Declare @Val varchar(10);
Declare @tablename varchar(20);
Declare @sql nvarchar(200);
Declare @sql1 nvarchar(200);
SET @Col = '...'; --INSERT COLUMN NAME
SET @Val = ...; -- INSERT COLUMN VALUE
IF OBJECT_ID('tempdb.dbo.##TempTable1', 'U') IS NOT NULL
DROP TABLE ##TempTable1;
SELECT NULL AS MYKEY, name
into ##TempTable1
FROM sysobjects
WHERE id IN ( SELECT id FROM syscolumns WHERE name = @Col )
ORDER BY name asc
set rowcount 1
update ##TempTable1 set mykey = 1
while @@rowcount > 0
begin
set rowcount 0
set @tablename = (select name from ##TempTable1 where mykey = 1)
set @sql = 'If Exists (SELECT * FROM '+@tablename+' WHERE '+@Col+'='+@Val+') SELECT * FROM '+@tablename+' WHERE '+@Col+'='+@Val+';'
set @sql1 = 'If Exists (SELECT * FROM '+@tablename+' WHERE '+@Col+'='+@Val+') select name from ##TempTable1 where mykey = 1'
EXEC sp_executesql @sql1
EXEC sp_executesql @sql
delete ##TempTable1 where mykey = 1
set rowcount 1
update ##TempTable1 set mykey = 1
end
set rowcount 0