هل من الممكن الاستعلام عن أسماء الجداول التي تحتوي على أعمدة
LIKE '%myName%'
؟
طاولات البحث:
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;
البحث في الجداول وطرق العرض:
SELECT COLUMN_NAME AS 'ColumnName'
,TABLE_NAME AS 'TableName'
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME LIKE '%MyName%'
ORDER BY TableName
,ColumnName;
يمكننا أيضًا استخدام بناء الجملة التالي: -
select * from INFORMATION_SCHEMA.COLUMNS
where COLUMN_NAME like '%clientid%'
order by TABLE_NAME
خادم قاعدة البيانات:
SELECT Table_Name, Column_Name
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_CATALOG = 'YOUR_DATABASE'
AND COLUMN_NAME LIKE '%YOUR_COLUMN%'
وحي:
SELECT owner, table_name, column_name
FROM all_tab_columns
WHERE column_name LIKE '%YOUR_COLUMN_NAME%'
AND OWNER IN ('YOUR_SCHEMA_NAME');
هذا يجب أن يعمل:
SELECT name
FROM sysobjects
WHERE id IN ( SELECT id
FROM syscolumns
WHERE name like '%column_name%' )
إذا كنت أكثر في أدوات الطرف الثالث ، فهناك الكثير من الخيارات مثل:
يكون ذلك مفيدًا جدًا إذا كانت قاعدة البيانات الخاصة بك تحتوي على كائنات مشفرة (طرق عرض ، إجراءات ، وظائف) لأنه لا يمكنك البحث عنها بسهولة باستخدام جداول النظام.
select
s.[name] 'Schema',
t.[name] 'Table',
c.[name] 'Column',
d.[name] 'Data Type',
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%'
سيوفر لك هذا هنا بعض المعلومات الإضافية حول المخطط والجداول والأعمدة التي قد تختارها أو لا تختارها لاستخدام شروط إضافية في بند "أين يمكنك التصفية". على سبيل المثال ، إذا أردت فقط رؤية الحقول التي يجب أن تحتوي على قيم ، فقم بإضافة
and c.is_nullable = 0
يمكنك إضافة شرطيات أخرى ، لقد أضفت أيضًا الأعمدة في جملة التحديد بهذه الطريقة الرأسية بحيث كان من السهل إعادة ترتيب أو إزالة أو إعادة تسمية أو إضافة آخرين بناءً على احتياجاتك. بالتناوب يمكنك البحث عن الجداول فقط باستخدام T.Name. لها تخصيص جدا.
استمتع.
لا أعرف لماذا يقترح الكثير منكم الانضمام إلى sys.table with sys.columns
، يمكنك ببساطة استخدام الكود أدناه:
Select object_name(object_id) as TableName,* from SYS.columns where name LIKE '%MyName%'
أو
إذا كنت تريد اسم المخطط أيضًا:
Select * from INFORMATION_SCHEMA.COLUMNS
where COLUMN_NAME LIKE '%MyName%'
إذا كنت تريد ببساطة اسم الجدول الذي يمكنك تشغيله:
select object_name(object_id) from sys.columns
where name like '%received_at%'
إذا كنت تريد "اسم المخطط" أيضًا (وهو ما تريده في كثير من الحالات ، حيث سيكون لديك الكثير من المخططات المختلفة ، وما لم تتمكن من تذكر كل جدول في قاعدة البيانات والمكان الذي ينتمي إليه هذا مفيدًا) ، قم بتشغيل:
select OBJECT_SCHEMA_NAME(object_id),object_name(object_id) from sys.columns
where name like '%received_at%'
وأخيرًا إذا كنت تريد ذلك بتنسيق أجمل (على الرغم من أن هذا هو المكان الذي يصبح فيه الكود (في رأيي) معقدًا جدًا للكتابة السهلة):
select concat(OBJECT_SCHEMA_NAME(object_id),'.',object_name(object_id)) from sys.columns
where name like '%received_at%'
لاحظ أنه يمكنك أيضًا إنشاء وظيفة بناءً على ما لدي:
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 في عام 2012. بالنسبة للعام 2008r2 والاستخدام السابق + لتسلسل السلاسل.
لقد أعدت تنسيق بروك قليلاً منذ أن نشرت هذا. إنها الآن أكثر تقدماً بعض الشيء ولكنها تبدو أكثر فوضى (لكنها في proc لذلك لن ترى ذلك أبدًا) ويتم تنسيقها بشكل أفضل.
يتيح لك هذا الإصدار امتلاكه في قاعدة بيانات إدارية ثم البحث في أي قاعدة بيانات. تغيير انحدار @db
من 'master'
إلى أي مكان تريد أن تكون فيه قاعدة البيانات الافتراضية (ملاحظة: استخدام وظيفة CONCAT () لن يعمل إلا مع 2012+ إلا إذا قمت بتغيير تسلسل السلسلة لاستخدام معاملات +
).
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
يمكنك العثور عليه من INFORMATION_SCHEMA.COLUMNS بواسطة مرشح filter_name
Select DISTINCT TABLE_NAME as TableName,COLUMN_NAME as ColumnName
From INFORMATION_SCHEMA.COLUMNS Where column_name like '%myname%'
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%' ;
سوف يمنحك الاستعلام التالي أسماء الجداول الدقيقة لقاعدة البيانات التي لها اسم حقل مثل "٪ myName".
SELECT distinct(TABLE_NAME)
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME LIKE '%myName%'
للحصول على معلومات كاملة: اسم العمود ، اسم الجدول وكذلك مخطط الجدول ..
SELECT COLUMN_NAME, TABLE_NAME, TABLE_SCHEMA
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME LIKE '%col_Name%'
لقد حاولت فقط وهذا يعمل تماما
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;
فقط قم بتغيير YourDatbaseName إلى قاعدة البيانات الخاصة بك واسم YourcolumnName إلى اسم العمود الخاص بك الذي كنت تبحث عن بقية الاحتفاظ به كما هو.
نأمل أن يكون هذا قد ساعد
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
لقد استخدمت هذا لنفس الغرض وعملت:
select * from INFORMATION_SCHEMA.COLUMNS
where TABLE_CATALOG= 'theDatabase'
and COLUMN_NAME like 'theCol%'
نأمل أن لا تكون هذه إجابة مكررة ، ولكن ما أود القيام به هو إنشاء عبارة sql في بيان sql الذي سيسمح لي بالبحث عن القيم التي أبحث عنها (وليس فقط الجداول التي تحتوي على أسماء الحقول هذه (عادةً ما تكون ضروري بالنسبة لي لحذف أي معلومات تتعلق بمعرف اسم العمود الذي أبحث عنه):
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%'
بعد ذلك يمكنني نسخ ولصق تشغيل عمود "SQLToRun" الأول ... ثم استبدل "Select * from" بـ "Delete from" ويسمح لي بحذف أي إشارات إلى هذا المعرف المحدد! اكتب هذه النتائج إلى الملف حتى تتمكن من يكون لهم فقط في القضية.
ملاحظة **** تأكد من إزالة أي جداول bakup قبل تشغيل بيان الحذف الخاص بك ...
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;
مثل Oracle يمكنك العثور على الجداول والأعمدة مع هذا:
select table_name, column_name
from user_tab_columns
where column_name
like '%myname%';
لمجرد تحسين الإجابات أعلاه ، قمت بتضمين "طرق عرض" بالإضافة إلى تسلسل المخطط والجدول/العرض معًا مما يجعل النتائج أكثر وضوحًا.
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];
يمكنك تجربة هذا الاستعلام:
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
إليك حلًا عمليًا لقاعدة بيانات Sybase
select
t.table_name,
c.column_name
from
systab as t key join systabcol as c
where
c.column_name = 'MyColumnName'