Belirli bir alt dize içeren sütun adlarına sahip tüm sütunları bulmak için SQL Server yönetim stüdyosunu kullanabilmemin bir yolu var mı?


11

SQL Server Management Studio 2008 kullanıyorum.

Binlerce sütun içeren eski bir veritabanım var. Adları belirli bir alt dize içeren tüm sütunları arayabilirsem iyi olur.

Bunu nasıl yapacağını bilen var mı?

Teşekkürler!


1
İşi yapmak için schemacrawler adlı bir Java projesi kullanarak kendi toplu iş dosya komut dosyası ile bu tür bir şey yapmak.
djangofan

Yanıtlar:


16

Mmhh deneyebilirsiniz:

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

ah, bunun için güzel bir gui ekranı yok.
IsaacB

Tamam, tam olarak ne istiyorsun :)?
Stef

sys.columns benim için var gibi görünmüyor, içine bakıyorum
IsaacB

Onları "göremiyorsanız", bunun nedeni doğru izinlerinizin olmamasıdır. HİBE verebilir misiniz?
Stef

2008 Studio kazayla eski bir sql server 2000 veritabanı sorgulama. Senaryonuz aslında çalışıyor, çok teşekkürler.
IsaacB

2

Red-Gate'in SQL Search gibi ücretsiz olan bazı 3. taraf araçlarını kullanabilirsiniz .


yüklü kırmızı kapıdan bir şey var, belki ben kontrol ve sql arama olup olmadığını görmek. Teşekkürler!
IsaacB

2

BİLGİ_SCHEMA görünümlerini kullanabilirsiniz.

USE <database>

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

Bir yakalama, doğru veritabanını kullandığınızdan emin olmaktır.


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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.