Có thể truy vấn tên bảng có chứa cột không
LIKE '%myName%'
?
Có thể truy vấn tên bảng có chứa cột không
LIKE '%myName%'
?
Câu trả lời:
Bảng tìm kiếm:
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;
Tìm kiếm Bảng & Lượt xem:
SELECT COLUMN_NAME AS 'ColumnName'
,TABLE_NAME AS 'TableName'
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME LIKE '%MyName%'
ORDER BY TableName
,ColumnName;
INFORMATION_SCHEMA
khung nhìn @Revious có trong SQL Server tuân thủ định nghĩa tiêu chuẩn ISO cho Information_SCHema. , sys.columns
, sys.tables
Là Microsoft Sql Server cụ thể.
TABLE_SCHEMA
trong danh sách lựa chọn của bạn có thể hữu ích. Vẫn là +1 vì đó là một câu trả lời hay.
Chúng tôi cũng có thể sử dụng cú pháp sau: -
select * from INFORMATION_SCHEMA.COLUMNS
where COLUMN_NAME like '%clientid%'
order by TABLE_NAME
INFORMATION_SCHEMA
là một phần của Tiêu chuẩn ANSI
Máy chủ SQL:
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%'
Điều này ở đây sẽ cung cấp cho bạn thêm một chút thông tin về lược đồ, bảng và cột mà bạn có thể hoặc không thể chọn sử dụng các điều kiện bổ sung trong mệnh đề where của bạn để lọc. Ví dụ: nếu bạn chỉ muốn xem các trường phải có giá trị thêm
and c.is_nullable = 0
Bạn có thể thêm các điều kiện khác, tôi cũng đã thêm các cột trong mệnh đề select theo cách dọc này để dễ dàng sắp xếp lại, xóa, đổi tên hoặc thêm các cột khác dựa trên nhu cầu của bạn. Thay phiên, bạn có thể tìm kiếm chỉ các bảng bằng cách sử dụng T.Name. Nó rất tùy biến.
Thưởng thức.
Nếu bạn thích dùng các công cụ của bên thứ ba, có rất nhiều tùy chọn như:
Chúng rất hữu ích nếu cơ sở dữ liệu của bạn chứa các đối tượng được mã hóa (dạng xem, thủ tục, hàm) vì bạn không thể dễ dàng tìm kiếm chúng bằng các bảng hệ thống.
Tôi không biết tại sao rất nhiều bạn đề nghị Tham gia với sys.table with sys.columns
bạn chỉ có thể sử dụng mã dưới đây:
Select object_name(object_id) as TableName,* from SYS.columns where name LIKE '%MyName%'
hoặc là
Nếu bạn muốn tên lược đồ là tốt:
Select * from INFORMATION_SCHEMA.COLUMNS
where COLUMN_NAME LIKE '%MyName%'
Nếu bạn chỉ muốn tên bảng, bạn có thể chạy:
select object_name(object_id) from sys.columns
where name like '%received_at%'
Nếu bạn cũng muốn Tên Schema (trong nhiều trường hợp bạn sẽ làm, vì bạn sẽ có rất nhiều lược đồ khác nhau, và trừ khi bạn có thể nhớ mọi bảng trong cơ sở dữ liệu và nơi nó thuộc về nó có thể hữu ích) chạy:
select OBJECT_SCHEMA_NAME(object_id),object_name(object_id) from sys.columns
where name like '%received_at%'
và cuối cùng nếu bạn muốn nó ở định dạng đẹp hơn (mặc dù đây là nơi mã (theo tôi) đang trở nên quá phức tạp để dễ viết):
select concat(OBJECT_SCHEMA_NAME(object_id),'.',object_name(object_id)) from sys.columns
where name like '%received_at%'
lưu ý bạn cũng có thể tạo một hàm dựa trên những gì tôi có:
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
Điều đáng chú ý là tính năng concat đã được thêm vào năm 2012. Trong năm 2008r2 và trước đó sử dụng + để nối chuỗi.
Tôi đã định dạng lại một chút từ khi tôi đăng bài này. Bây giờ nó đã tiến bộ hơn một chút nhưng trông có vẻ lộn xộn hơn (nhưng nó ở dạng Proc nên bạn sẽ không bao giờ nhìn thấy nó) và nó được định dạng tốt hơn.
Phiên bản này cho phép bạn có nó trong cơ sở dữ liệu quản trị và sau đó tìm kiếm thông qua bất kỳ cơ sở dữ liệu nào. Thay đổi cách giải mã @db
từ 'master'
bất kỳ nơi nào bạn muốn cơ sở dữ liệu mặc định thành (LƯU Ý: sử dụng hàm CONCAT () sẽ chỉ hoạt động với 2012+ trừ khi bạn thay đổi nối chuỗi để sử dụng +
toán tử).
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;
Đó là từ Blog của Pinal Sir
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%' ;
Truy vấn sau đây sẽ cung cấp cho bạn tên bảng chính xác của cơ sở dữ liệu có tên trường như '% myName'.
SELECT distinct(TABLE_NAME)
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME LIKE '%myName%'
tôi vừa thử nó và nó hoạt động hoàn hảo
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;
Chỉ thay đổi YourDatbaseName thành cơ sở dữ liệu của bạn và YourcolumnName thành tên cột mà bạn đang tìm kiếm phần còn lại giữ nguyên như vậy.
Hy vọng điều này đã giúp
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
Hy vọng rằng đây không phải là một câu trả lời trùng lặp, nhưng điều tôi muốn làm là tạo ra một câu lệnh sql trong câu lệnh sql cho phép tôi tìm kiếm các giá trị mà tôi đang tìm kiếm (không chỉ các bảng có tên trường đó (như thường thấy cần thiết cho tôi để xóa bất kỳ thông tin nào liên quan đến id của tên cột tôi đang tìm):
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%'
Sau đó, tôi có thể sao chép và dán chạy cột đầu tiên "SQLToRun" ... sau đó tôi thay thế "Chọn * từ 'bằng' Xóa từ 'và nó cho phép tôi xóa mọi tham chiếu đến ID đã cho đó! Viết các kết quả này vào tệp để bạn có chúng chỉ trong trường hợp.
LƯU Ý **** Đảm bảo bạn loại bỏ bất kỳ bảng bakup nào trước khi chạy câu lệnh xóa của bạn ...
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;
Tôi muốn một cái gì đó cho các bảng và các khung nhìn không làm cho mắt tôi bị chảy máu.
Truy vấn
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]
Kết quả
Type Object Column
----------------------------
BASE TABLE Table1 myName1
BASE TABLE Table2 myName2
VIEW View1 myName1
VIEW View2 myName2
Chỉ để cải thiện các câu trả lời ở trên, tôi cũng đã bao gồm Lượt xem và Kết hợp Lược đồ và Bảng / Xem cùng nhau làm cho Kết quả rõ ràng hơn.
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];
Bạn có thể thử truy vấn này:
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
Đây là một giải pháp làm việc cho cơ sở dữ liệu Sybase
select
t.table_name,
c.column_name
from
systab as t key join systabcol as c
where
c.column_name = 'MyColumnName'
Chúng ta có thể sử dụng sp_columns
cho mục đích này.
sp_columns 'table name', null, null, '%column name%'