有没有一种方法可以使用SQL Server Management Studio查找列名称包含某个子字符串的所有列?


11

我正在使用SQL Server Management Studio 2008。

我有一个庞大的旧数据库,其中包含数千列。如果我可以搜索名称中包含某个子字符串的所有列,那将是很好的。

有谁知道如何做到这一点?

谢谢!


1
我使用自己的批处理文件脚本来执行此类操作,使用一个名为schemacrawler的Java项目来完成工作。
djangofan 2011年

Answers:


16

嗯,您可以尝试:

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

啊,因此没有很好的GUI屏幕。
IsaacB

好的,您到底要什么:)?
Stef

sys.columns对我来说似乎不存在,我正在研究它
IsaacB 2011年

如果您无法“看到”它们,那是因为您没有正确的权限。你可以赠予吗?
Stef

我从2008 Studio偶然查询了一个旧的sql server 2000数据库。您的脚本实际上有效,非常感谢。
IsaacB

2

您可以使用一些免费的第三方工具,例如Red-Gate的SQL Search


我从Red Gate安装了一些东西,也许我会检查一下是否有sql搜索。谢谢!
IsaacB

2

您可以使用INFORMATION_SCHEMA视图。

USE <database>

SELECT COLUMN_NAME
     , TABLE_NAME     
 FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME LIKE '%<string you are looking for>%'

要注意的是要确保使用正确的数据库。


0
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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.