Apakah mungkin untuk menanyakan nama tabel yang berisi kolom
LIKE '%myName%'
?
Apakah mungkin untuk menanyakan nama tabel yang berisi kolom
LIKE '%myName%'
?
Jawaban:
Cari Tabel:
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;
Cari Tabel & Tampilan:
SELECT COLUMN_NAME AS 'ColumnName'
,TABLE_NAME AS 'TableName'
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME LIKE '%MyName%'
ORDER BY TableName
,ColumnName;
INFORMATION_SCHEMA
disertakan dalam SQL Server mematuhi definisi standar ISO untuk INFORMATION_SCHEMA. , sys.columns
, sys.tables
Adalah Microsoft Sql Server tertentu.
TABLE_SCHEMA
dalam daftar pilihan Anda dapat membantu. Masih memberi +1 karena ini adalah jawaban yang bagus.
Kami juga dapat menggunakan sintaks berikut: -
select * from INFORMATION_SCHEMA.COLUMNS
where COLUMN_NAME like '%clientid%'
order by TABLE_NAME
INFORMATION_SCHEMA
adalah bagian dari Standar ANSI
SQL Server:
SELECT Table_Name, Column_Name
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_CATALOG = 'YOUR_DATABASE'
AND COLUMN_NAME LIKE '%YOUR_COLUMN%'
Peramal:
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%'
Ini di sini akan memberi Anda sedikit informasi tambahan tentang skema, tabel dan kolom yang Anda mungkin atau mungkin tidak memilih untuk menggunakan kondisi tambahan di klausa tempat Anda memfilter. Misalnya, jika Anda hanya ingin melihat bidang yang harus memiliki nilai tambah
and c.is_nullable = 0
Anda dapat menambahkan persyaratan lainnya, saya juga menambahkan kolom dalam klausa pilih dengan cara vertikal ini sehingga mudah untuk memesan ulang, menghapus, mengganti nama, atau menambahkan yang lain berdasarkan kebutuhan Anda. Bergantian Anda bisa mencari tabel hanya dengan menggunakan T.Name. Ini sangat bisa dikustomisasi.
Nikmati.
Jika Anda lebih ke alat pihak ketiga ada banyak pilihan di sana seperti:
Ini sangat berguna jika database Anda berisi objek terenkripsi (tampilan, prosedur, fungsi) karena Anda tidak dapat dengan mudah mencari ini menggunakan tabel sistem.
Saya tidak tahu mengapa begitu banyak dari Anda yang menyarankan Bergabung dengan sys.table with sys.columns
Anda cukup menggunakan kode di bawah ini:
Select object_name(object_id) as TableName,* from SYS.columns where name LIKE '%MyName%'
atau
Jika Anda ingin nama skema juga:
Select * from INFORMATION_SCHEMA.COLUMNS
where COLUMN_NAME LIKE '%MyName%'
Jika Anda hanya ingin nama tabel Anda dapat menjalankan:
select object_name(object_id) from sys.columns
where name like '%received_at%'
Jika Anda ingin Nama Skema juga (yang dalam banyak kasus Anda akan, karena Anda akan memiliki banyak skema yang berbeda, dan kecuali Anda dapat mengingat setiap tabel dalam database dan di mana tempatnya, ini dapat berguna) jalankan:
select OBJECT_SCHEMA_NAME(object_id),object_name(object_id) from sys.columns
where name like '%received_at%'
dan akhirnya jika Anda menginginkannya dalam format yang lebih bagus (walaupun di sinilah kodenya (Menurut saya) menjadi terlalu rumit untuk penulisan yang mudah):
select concat(OBJECT_SCHEMA_NAME(object_id),'.',object_name(object_id)) from sys.columns
where name like '%received_at%'
perhatikan Anda juga dapat membuat fungsi berdasarkan apa yang saya miliki:
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
Perlu dicatat bahwa fitur concat ditambahkan pada 2012. Untuk 2008r2 dan sebelumnya menggunakan + untuk menggabungkan string.
Saya telah memformat ulang proc sedikit sejak saya memposting ini. Ini sedikit lebih maju sekarang tetapi terlihat jauh lebih berantakan (tapi ada di proc sehingga Anda tidak akan pernah melihatnya) dan diformat lebih baik.
Versi ini memungkinkan Anda untuk memilikinya dalam database administratif dan kemudian mencari melalui database apa pun. Ubah deklerasi dari @db
dari 'master'
mana Anda ingin menjadi basis data default (CATATAN: menggunakan fungsi CONCAT () hanya akan bekerja dengan 2012+ kecuali Anda mengubah rangkaian string untuk menggunakan +
operator).
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;
Itu dari Pinal Sir Blog
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%' ;
Permintaan berikut akan memberi Anda nama tabel yang tepat dari database yang memiliki nama bidang seperti '% myName'.
SELECT distinct(TABLE_NAME)
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME LIKE '%myName%'
Saya baru saja mencobanya dan ini bekerja dengan sempurna
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;
Hanya ubah YourDatbaseName ke database Anda dan YourcolumnName menjadi nama kolom Anda yang Anda cari selebihnya tetap seperti semula.
Semoga ini bisa membantu
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
Semoga ini bukan jawaban duplikat, tapi yang ingin saya lakukan adalah membuat pernyataan sql dalam pernyataan sql yang akan memungkinkan saya untuk mencari nilai yang saya cari (bukan hanya tabel dengan nama bidang tersebut (seperti biasanya diperlukan bagi saya untuk kemudian menghapus semua info yang terkait dengan id dari nama kolom yang saya cari):
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%'
Lalu saya bisa menyalin dan menempelkan jalankan kolom 1 "SQLToRun" ... lalu saya ganti "Pilih * dari 'dengan' Hapus dari 'dan itu memungkinkan saya untuk menghapus referensi apa pun ke ID yang diberikan! Tuliskan hasil ini ke file sehingga Anda memilikinya untuk berjaga-jaga.
CATATAN **** Pastikan Anda menghilangkan tabel bakup apa pun sebelum menjalankan pernyataan hapus Anda ...
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;
Saya menginginkan sesuatu untuk tabel dan tampilan yang tidak membuat mata saya berdarah.
Pertanyaan
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]
Hasil
Type Object Column
----------------------------
BASE TABLE Table1 myName1
BASE TABLE Table2 myName2
VIEW View1 myName1
VIEW View2 myName2
Hanya untuk meningkatkan jawaban di atas, saya sudah menyertakan Tampilan dan Gabungan Skema dan Tabel / Lihat bersama-sama membuat Hasil lebih jelas.
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];
Anda dapat mencoba pertanyaan ini:
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
Inilah solusi yang berfungsi untuk basis data Sybase
select
t.table_name,
c.column_name
from
systab as t key join systabcol as c
where
c.column_name = 'MyColumnName'
Kita dapat menggunakannya sp_columns
untuk tujuan tersebut.
sp_columns 'table name', null, null, '%column name%'