Sütunları içeren tablo adlarını sorgulamak mümkün mü
LIKE '%myName%'
?
Sütunları içeren tablo adlarını sorgulamak mümkün mü
LIKE '%myName%'
?
Yanıtlar:
Arama Tabloları:
SELECT c.name AS 'ColumnName'
,t.name AS 'TableName'
FROM sys.columns c
JOIN sys.tables t ON c.object_id = t.object_id
WHERE c.name LIKE '%MyName%'
ORDER BY TableName
,ColumnName;
Tablolarda ve Görünümlerde Ara:
SELECT COLUMN_NAME AS 'ColumnName'
,TABLE_NAME AS 'TableName'
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME LIKE '%MyName%'
ORDER BY TableName
,ColumnName;
INFORMATION_SCHEMA
SQL Server'da bulunan güvenilir görünümler, BİLGİ_SCHEMA için ISO standart tanımına uygundur. , sys.columns
, sys.tables
Microsoft SQL Server özeldir.
TABLE_SCHEMA
Seçim listenize dahil etmek yardımcı olabilir. Hala +1 çünkü iyi bir cevap.
Aşağıdaki sözdizimini de kullanabiliriz: -
select * from INFORMATION_SCHEMA.COLUMNS
where COLUMN_NAME like '%clientid%'
order by TABLE_NAME
INFORMATION_SCHEMA
parçası olarak verilen tüm bu farklı veritabanlarında işe yaraması şaşırtıcı değil
SQL Server:
SELECT Table_Name, Column_Name
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_CATALOG = 'YOUR_DATABASE'
AND COLUMN_NAME LIKE '%YOUR_COLUMN%'
Oracle:
SELECT owner, table_name, column_name
FROM all_tab_columns
WHERE column_name LIKE '%YOUR_COLUMN_NAME%'
AND OWNER IN ('YOUR_SCHEMA_NAME');
select
s.[name] 'Schema',
t.[name] 'Table',
c.[name] 'Column',
d.[name] 'Data Type',
c.[max_length] 'Length',
d.[max_length] 'Max Length',
d.[precision] 'Precision',
c.[is_identity] 'Is Id',
c.[is_nullable] 'Is Nullable',
c.[is_computed] 'Is Computed',
d.[is_user_defined] 'Is UserDefined',
t.[modify_date] 'Date Modified',
t.[create_date] 'Date created'
from sys.schemas s
inner join sys.tables t
on s.schema_id = t.schema_id
inner join sys.columns c
on t.object_id = c.object_id
inner join sys.types d
on c.user_type_id = d.user_type_id
where c.name like '%ColumnName%'
Bu, size filtrelemek için yan tümcenizde ek koşulları kullanmayı tercih edebileceğiniz veya seçemeyeceğiniz şema, tablolar ve sütunlar hakkında biraz daha bilgi verecektir. Örneğin, yalnızca değer eklemesi gereken alanları görmek istiyorsanız
and c.is_nullable = 0
Başka şartlar ekleyebilir, ayrıca seçim cümlesindeki sütunları bu dikey şekilde ekledim, böylece ihtiyaçlarınıza göre yeniden sıralamak, kaldırmak, yeniden adlandırmak veya başkalarını eklemek kolaydı. Alternatif olarak T.Name kullanarak sadece tabloları arayabilirsiniz. Çok özelleştirilebilir.
Zevk almak.
Üçüncü taraf araçlarına daha fazla giriyorsanız, orada birçok seçenek var:
Veritabanınız şifreli nesneler (görünümler, prosedürler, işlevler) içeriyorsa bunlar çok kullanışlıdır, çünkü bunları sistem tablolarını kullanarak kolayca arayamazsınız.
Neden bu kadar çoğunuzun sys.table with sys.columns
sizinle katılmayı önerdiğini bilmiyorum sadece aşağıdaki kodu kullanabilirsiniz:
Select object_name(object_id) as TableName,* from SYS.columns where name LIKE '%MyName%'
veya
Şema adını da istiyorsanız:
Select * from INFORMATION_SCHEMA.COLUMNS
where COLUMN_NAME LIKE '%MyName%'
Yalnızca tablo adını istiyorsanız, çalıştırabilirsiniz:
select object_name(object_id) from sys.columns
where name like '%received_at%'
Şema Adını da istiyorsanız (birçok durumda, çok farklı şemalara sahip olacağınız ve veritabanındaki her tabloyu ve nereye ait olduğunu hatırlayamıyorsanız) yararlı olabilir:
select OBJECT_SCHEMA_NAME(object_id),object_name(object_id) from sys.columns
where name like '%received_at%'
ve son olarak daha güzel bir biçimde istiyorsanız (kodun (bence) kolay yazma için çok karmaşık olmasına rağmen):
select concat(OBJECT_SCHEMA_NAME(object_id),'.',object_name(object_id)) from sys.columns
where name like '%received_at%'
Ayrıca sahip olduğum şeylere dayalı bir işlev de oluşturabilirsiniz:
CREATE PROCEDURE usp_tablecheck
--Scan through all tables to identify all tables with columns that have the provided string
--Stephen B
@name nvarchar(200)
AS
SELECT CONCAT(OBJECT_SCHEMA_NAME(object_id),'.',object_name(object_id)) AS [Table Name], name AS [Column] FROM sys.columns
WHERE name LIKE CONCAT('%',@name,'%')
ORDER BY [Table Name] ASC, [Column] ASC
GO
Concat özelliğinin 2012 yılında eklendiğine dikkat etmek gerekir. 2008r2 ve önceki sürümlerde dizeleri birleştirmek için + kullanın.
Bunu gönderdiğimden beri proc'u biraz yeniden biçimlendirdim. Şimdi biraz daha gelişmiş ama çok daha dağınık görünüyor (ama bir proc'ta, böylece asla görmeyeceksiniz) ve daha iyi biçimlendirilmiş.
Bu sürüm, bir yönetim veritabanında bulunmanıza ve daha sonra herhangi bir veritabanında arama yapmanıza olanak tanır. Ait beyanınıgeçersiz değiştirme @db
dan 'master'
hangisi için varsayılan veritabanı (: Kullanmak dize birleştirme 2012+ sadece işi değişecek sürece CONCAT () işlevini kullanarak NOT olmak istiyorum +
operatörleri).
CREATE PROCEDURE [dbo].[usp_tablecheck]
--Scan through all tables to identify all tables in the specified database with columns that have the provided string
--Stephen B
@name nvarchar(200)
,@db nvarchar(200) = 'master'
AS
DECLARE @sql nvarchar(4000) = CONCAT('
SELECT concat(OBJECT_SCHEMA_NAME(col.object_id,DB_ID(''',@db,''')),''.'',object_name(col.object_id,DB_ID(''',@db,'''))) AS [Table Name]
,col.name AS [Column]
FROM ',@db,'.sys.columns col
LEFT JOIN ',@db,'.sys.objects ob
ON ob.object_id = col.object_id
WHERE
col.name LIKE CONCAT(''%'',''',@name,''',''%'')
AND ob.type =''U''
ORDER BY [Table Name] ASC
,[Column] ASC')
EXECUTE (@sql)
GO
USE AdventureWorks
GO
SELECT t.name AS table_name, SCHEMA_NAME(schema_id) AS schema_name,
c.name AS column_name
FROM sys.tables AS t
INNER JOIN sys.columns c ON t.OBJECT_ID = c.OBJECT_ID
WHERE c.name LIKE '%EmployeeID%'
ORDER BY schema_name, table_name;
Pinal Sir Blog'dan
SELECT COLUMN_NAME, TABLE_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME LIKE '%myName%'
SELECT [TABLE_NAME] ,
[INFORMATION_SCHEMA].COLUMNS.COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE INFORMATION_SCHEMA.COLUMNS.COLUMN_NAME LIKE '%NAME%' ;
Aşağıdaki sorgu size '% myName' gibi alan adına sahip veritabanının tam tablo adlarını verecektir.
SELECT distinct(TABLE_NAME)
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME LIKE '%myName%'
sadece denedim ve bu mükemmel çalışıyor
USE YourDatabseName
GO
SELECT t.name AS table_name,
SCHEMA_NAME(schema_id) AS schema_name,
c.name AS column_name
FROM sys.tables AS t
INNER JOIN sys.columns c ON t.OBJECT_ID = c.OBJECT_ID
WHERE c.name LIKE '%YourColumnName%'
ORDER BY schema_name, table_name;
Yalnızca YourDatbaseName veritabanınızı ve YourcolumnName sütun adınızı değiştirmek için geri kalanını olduğu gibi tutun.
Umarım bu yardımcı olmuştur
DECLARE @columnName as varchar(100)
SET @columnName = 'ColumnName'
SELECT t.name AS Table, c.name AS Column,
ty.name AS Type, c.max_length AS Length
FROM sys.tables AS t
INNER JOIN sys.columns c ON t.OBJECT_ID = c.OBJECT_ID
INNER JOIN sys.types ty ON c.system_type_id = ty.system_type_id
WHERE c.name LIKE @columnName
ORDER BY t.name, c.name
Umarım bu yinelenen bir cevap değildir, ancak yapmak istediğim bir sql deyimi içinde aradığım değerleri aramamı sağlayacak bir sql deyimi oluşturmaktır (sadece bu alan adlarına sahip tabloları değil (genellikle daha sonra aradığım sütun adının kimliği ile ilgili herhangi bir bilgiyi silmek için gerekli):
SELECT 'Select * from ' + t.name + ' where ' + c.name + ' = 148' AS SQLToRun
FROM sys.columns c, c.name as ColName, t.name as TableName
JOIN sys.tables t
ON c.object_id = t.object_id
WHERE c.name LIKE '%ProjectID%'
Sonra kopyalamak ve yapıştırmak çalıştırmak benim 1. sütun "SQLToRun" ... sonra "Seç * gelen 'gelen' Sil 'ile değiştirin ve verilen kimliğe herhangi bir başvuru silmek için izin verir! Bu sonuçları dosyaya yazın böylece size her ihtimale karşı onları.
NOT **** Silme ifadenizi çalıştırmadan önce tüm pişirme tablolarını ortadan kaldırdığınızdan emin olun ...
SELECT 'Delete from ' + t.name + ' where ' + c.name + ' = 148' AS SQLToRun
FROM sys.columns c, c.name as ColName, t.name as TableName
JOIN sys.tables t
ON c.object_id = t.object_id
WHERE c.name LIKE '%ProjectID%'
SELECT t.name AS table_name,
SCHEMA_NAME(schema_id) AS schema_name,
c.name AS column_name
FROM sys.tables AS t INNER JOIN sys.columns c ON t.OBJECT_ID = c.OBJECT_ID
WHERE c.name LIKE '%Label%'
ORDER BY schema_name, table_name;
Gözlerimi kanamayan tablolar ve görüntüler için bir şey istedim .
Sorgu
SELECT
t.TABLE_TYPE AS [Type],
c.TABLE_NAME AS [Object],
c.COLUMN_NAME AS [Column]
FROM
INFORMATION_SCHEMA.COLUMNS AS c
LEFT JOIN INFORMATION_SCHEMA.TABLES AS t ON
t.TABLE_CATALOG = c.TABLE_CATALOG AND
t.TABLE_SCHEMA = c.TABLE_SCHEMA AND
t.TABLE_NAME = c.TABLE_NAME
WHERE
c.COLUMN_NAME LIKE '%myName%'
ORDER BY
[Type],
[Object],
[Column]
Sonuç
Type Object Column
----------------------------
BASE TABLE Table1 myName1
BASE TABLE Table2 myName2
VIEW View1 myName1
VIEW View2 myName2
Sadece yukarıdaki cevaplar üzerinde geliştirmek için ben de Görünümler dahil ve Şema ve Tablo / Görünüm birlikte sonuçları daha belirgin hale birleştirdi.
DECLARE @COLUMNNAME AS VARCHAR(100);
SET @COLUMNNAME = '%Absence%';
SELECT CASE
WHEN [T].[NAME] IS NULL
THEN 'View'
WHEN [T].[NAME] = ''
THEN 'View'
ELSE 'Table'
END AS [TYPE], '[' + [S].[NAME] + '].' + '[' + CASE
WHEN [T].[NAME] IS NULL
THEN [V].[NAME]
WHEN [T].[NAME] = ''
THEN [V].[NAME]
ELSE [T].[NAME]
END + ']' AS [TABLE], [C].[NAME] AS [COLUMN]
FROM [SYS].[SCHEMAS] AS [S] LEFT JOIN [SYS].[TABLES] AS [T] ON [S].SCHEMA_ID = [T].SCHEMA_ID
LEFT JOIN [SYS].[VIEWS] AS [V] ON [S].SCHEMA_ID = [V].SCHEMA_ID
INNER JOIN [SYS].[COLUMNS] AS [C] ON [T].OBJECT_ID = [C].OBJECT_ID
OR
[V].OBJECT_ID = [C].OBJECT_ID
INNER JOIN [SYS].[TYPES] AS [TY] ON [C].[SYSTEM_TYPE_ID] = [TY].[SYSTEM_TYPE_ID]
WHERE [C].[NAME] LIKE @COLUMNNAME
GROUP BY '[' + [S].[NAME] + '].' + '[' + CASE
WHEN [T].[NAME] IS NULL
THEN [V].[NAME]
WHEN [T].[NAME] = ''
THEN [V].[NAME]
ELSE [T].[NAME]
END + ']', [T].[NAME], [C].[NAME], [S].[NAME]
ORDER BY '[' + [S].[NAME] + '].' + '[' + CASE
WHEN [T].[NAME] IS NULL
THEN [V].[NAME]
WHEN [T].[NAME] = ''
THEN [V].[NAME]
ELSE [T].[NAME]
END + ']', CASE
WHEN [T].[NAME] IS NULL
THEN 'View'
WHEN [T].[NAME] = ''
THEN 'View'
ELSE 'Table'
END, [T].[NAME], [C].[NAME];
Bu sorguyu deneyebilirsiniz:
USE AdventureWorks
GO
SELECT t.name AS table_name,
SCHEMA_NAME(schema_id) AS schema_name,
c.name AS column_name
FROM sys.tables AS t
INNER JOIN sys.columns c ON t.OBJECT_ID = c.OBJECT_ID
WHERE c.name LIKE '%myName%'
Create table #yourcolumndetails(
DBaseName varchar(100),
TableSchema varchar(50),
TableName varchar(100),
ColumnName varchar(100),
DataType varchar(100),
CharMaxLength varchar(100))
EXEC sp_MSForEachDB @command1='USE [?];
INSERT INTO #yourcolumndetails SELECT
Table_Catalog
,Table_Schema
,Table_Name
,Column_Name
,Data_Type
,Character_Maximum_Length
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME like ''origin'''
select * from #yourcolumndetails
Drop table #yourcolumndetails
İşte Sybase veritabanı için çalışan bir çözüm
select
t.table_name,
c.column_name
from
systab as t key join systabcol as c
where
c.column_name = 'MyColumnName'
sp_columns
Amaç için kullanabiliriz .
sp_columns 'table name', null, null, '%column name%'