it-swarm.asia

البحث عن كافة الجداول التي تحتوي على عمود بالاسم المحدد - MS SQL Server

هل من الممكن الاستعلام عن أسماء الجداول التي تحتوي على أعمدة

LIKE '%myName%'

؟

994
gruber

طاولات البحث:

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;
1571
AdaTheDev

يمكننا أيضًا استخدام بناء الجملة التالي: -

select * from INFORMATION_SCHEMA.COLUMNS 
where COLUMN_NAME like '%clientid%' 
order by TABLE_NAME
264
Khwaza Bandenawaz

خادم قاعدة البيانات:

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');
  • سهل هكذا!! (SQL ، PL/SQL)
    أستخدمه طوال الوقت للعثور على جميع مثيلات اسم العمود في قاعدة بيانات معينة (مخطط).
125
Todd ECU

هذا يجب أن يعمل:

SELECT name 
FROM sysobjects 
WHERE id IN ( SELECT id 
              FROM syscolumns 
              WHERE name like '%column_name%' )
70
cichy

إذا كنت أكثر في أدوات الطرف الثالث ، فهناك الكثير من الخيارات مثل:

يكون ذلك مفيدًا جدًا إذا كانت قاعدة البيانات الخاصة بك تحتوي على كائنات مشفرة (طرق عرض ، إجراءات ، وظائف) لأنه لا يمكنك البحث عنها بسهولة باستخدام جداول النظام.

61
Dwoolk
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. لها تخصيص جدا.

استمتع.

49
Francis Rodgers

لا أعرف لماذا يقترح الكثير منكم الانضمام إلى 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%'
41
user3583912

إذا كنت تريد ببساطة اسم الجدول الذي يمكنك تشغيله:

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
39
Ste Bov
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

25
shadab shah

يمكنك العثور عليه من INFORMATION_SCHEMA.COLUMNS بواسطة مرشح filter_name

Select DISTINCT TABLE_NAME as TableName,COLUMN_NAME as ColumnName
     From INFORMATION_SCHEMA.COLUMNS Where column_name like '%myname%'
22
Munavvar
SELECT COLUMN_NAME, TABLE_NAME
  FROM INFORMATION_SCHEMA.COLUMNS    
 WHERE COLUMN_NAME LIKE '%myName%'
20
Neil Knight
SELECT  [TABLE_NAME] ,
        [INFORMATION_SCHEMA].COLUMNS.COLUMN_NAME
FROM    INFORMATION_SCHEMA.COLUMNS
WHERE   INFORMATION_SCHEMA.COLUMNS.COLUMN_NAME LIKE '%NAME%' ;
20
Ritesh Varma-MCA

سوف يمنحك الاستعلام التالي أسماء الجداول الدقيقة لقاعدة البيانات التي لها اسم حقل مثل "٪ myName".

SELECT distinct(TABLE_NAME)
  FROM INFORMATION_SCHEMA.COLUMNS    
 WHERE COLUMN_NAME LIKE '%myName%'
16
Shaikh Farooque

للحصول على معلومات كاملة: اسم العمود ، اسم الجدول وكذلك مخطط الجدول ..

SELECT COLUMN_NAME, TABLE_NAME, TABLE_SCHEMA
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE COLUMN_NAME LIKE '%col_Name%'
14
Kaleab

لقد حاولت فقط وهذا يعمل تماما

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 إلى اسم العمود الخاص بك الذي كنت تبحث عن بقية الاحتفاظ به كما هو.

نأمل أن يكون هذا قد ساعد

12
Alz
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
8
Mauro Bilotti

لقد استخدمت هذا لنفس الغرض وعملت:

  select * from INFORMATION_SCHEMA.COLUMNS
  where TABLE_CATALOG= 'theDatabase'
  and COLUMN_NAME like 'theCol%'
7
Rainhider

نأمل أن لا تكون هذه إجابة مكررة ، ولكن ما أود القيام به هو إنشاء عبارة 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%'
6
Dan B
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;
6
PedroSouki

مثل Oracle يمكنك العثور على الجداول والأعمدة مع هذا:

select table_name, column_name
from user_tab_columns 
where column_name 
like '%myname%';
5
Iceknight

لمجرد تحسين الإجابات أعلاه ، قمت بتضمين "طرق عرض" بالإضافة إلى تسلسل المخطط والجدول/العرض معًا مما يجعل النتائج أكثر وضوحًا.

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];
3
Stephen Brett

يمكنك تجربة هذا الاستعلام:

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%'
3
soheila sadeghian
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
2
Joby

إليك حلًا عمليًا لقاعدة بيانات Sybase

select 
  t.table_name, 
  c.column_name 
from 
  systab as t key join systabcol as c 
where 
   c.column_name = 'MyColumnName'
0
Janey