Apakah ada cara saya bisa menggunakan studio manajemen SQL Server untuk menemukan semua kolom yang memiliki nama kolom yang berisi substring tertentu?

11

Saya menggunakan studio manajemen server SQL 2008.

Saya memiliki basis data warisan besar dengan ribuan kolom. Alangkah baiknya jika saya bisa mencari semua kolom yang namanya mengandung substring tertentu.

Adakah yang tahu bagaimana melakukan ini?

Terima kasih!

IsaacB
sumber
1
Saya melakukan hal semacam ini dengan skrip file batch saya sendiri, menggunakan proyek Java yang disebut schemacrawler untuk melakukan pekerjaan.
djangofan

Jawaban:

16

Mmhh, Anda bisa mencoba:

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
Stef
sumber
ah, jadi tidak ada layar gui yang bagus untuk ini.
IsaacB
Ok, apa yang sebenarnya Anda inginkan :)?
Stef
sys.columns tampaknya tidak ada untuk saya, saya sedang mencari ke dalamnya
IsaacB
Jika Anda tidak dapat "melihat" mereka, itu karena Anda tidak memiliki izin yang tepat. Bisakah kamu MENERIMA?
Stef
saya meminta database 2000 sql server lama secara tidak sengaja dari studio 2008. Script Anda benar-benar berfungsi, terima kasih banyak.
IsaacB
2

Anda bisa menggunakan beberapa alat pihak ke-3 seperti Red-Gate's SQL Search yang gratis.

jgardner04
sumber
saya punya sesuatu dari gerbang merah yang diinstal, mungkin saya akan memeriksa dan melihat apakah saya memiliki pencarian sql. Terima kasih!
IsaacB
2

Anda dapat menggunakan tampilan INFORMATION_SCHEMA.

USE <database>

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

Satu tangkapan adalah memastikan untuk MENGGUNAKAN database yang benar.

CTKeane
sumber
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
GeorgeB
sumber