SQL Server Management Studioを使用して、特定のサブストリングを含む列名を持つすべての列を検索する方法はありますか?


11

SQL Server Management Studio 2008を使用しています。

数千の列を持つ巨大なレガシーデータベースがあります。名前に特定の部分文字列が含まれるすべての列を検索できれば便利です。

誰もこれを行う方法を知っていますか?

ありがとう!


1
schemacrawlerと呼ばれるJavaプロジェクトを使用して作業を行う独自のバッチファイルスクリプトでこのようなことを行います。
djangofan

回答:


16

Mmhhあなたが試すことができます:

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

さて、あなたは正確に何をしたいですか:)?
ステフ

sys.columnsは私には存在しないようです、私はそれを探しています
-IsaacB

あなたがそれらを「見る」ことができない場合、それはあなたが正しい許可を持っていないためです。許可できますか?
ステフ

私は2008年のスタジオから偶然に古いSQL Server 2000データベースをクエリしていました。スクリプトは実際に動作します。どうもありがとう。
IsaacB

2

Red-GateのSQL Searchなどの無料のサードパーティツールを使用できます。


私は赤いゲートから何かをインストールしました、多分私は私が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>%'

1つの問題は、正しいデータベースを使用することを確認することです。


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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.