sql নির্দিষ্ট নাম সহ কলাম ধারণকারী সব টেবিল খুঁজুন-এমএস এসকিউএল সার্ভার




sql-server tsql (24)

কলাম থাকা সারণী নামের জন্য অনুসন্ধান করা সম্ভব

LIKE '%myName%'

?


আপনি এই প্রশ্নের চেষ্টা করতে পারেন:

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%'

শুধু উপরে উত্তরগুলিতে উন্নতি করতে আমি ভিউ অন্তর্ভুক্ত করেছি এবং স্কিম এবং টেবিল / একসাথে দেখুন ফলাফলগুলি আরও স্পষ্ট করে তুলেছি।

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];

অনুসন্ধানের টেবিল:

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;

নিম্নলিখিত ক্যোয়ারী ডাটাবেসটির সঠিক টেবিল নামগুলি '% myName' মত ক্ষেত্রের নাম দেবে।

SELECT distinct(TABLE_NAME)
  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

২01২ সালে কনক্যাট বৈশিষ্ট্যটি যুক্ত করা হয়েছে তা উল্লেখযোগ্য। 2008r2 এবং পূর্বের ব্যবহারের জন্য + স্ট্রিংগুলিকে সংযোজন করতে।

আমি পোস্ট পোস্ট করার পরে আমি একটি বিট পুনরায় ফরম্যাট করেছি। এটি এখন কিছুটা উন্নততর তবে অনেক মেসেজ দেখায় (কিন্তু এটি একটি প্রসেসে রয়েছে যাতে আপনি এটি দেখতে পাবেন না) এবং এটি আরও ভালভাবে ফর্ম্যাট করা হয়েছে।

এই সংস্করণটি আপনাকে এটি একটি প্রশাসনিক ডাটাবেসটিতে রাখতে এবং তারপরে কোনও ডাটাবেসের মাধ্যমে অনুসন্ধান করতে দেয়। ডিফল্ট ডাটাবেস হতে চাইলে 'master' থেকে @db এর @db পরিবর্তন করুন (উল্লেখ্য: CONCAT () ফাংশন ব্যবহার করে শুধুমাত্র +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

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; 

এটা পিনাল স্যার ব্লগ থেকে


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');
  • যে হিসাবে সহজ !! (এসকিউএল, পিএল / এসকিউএল) আমি প্রদত্ত ডাটাবেস (স্কিমা) এ কলামের নামের সমস্ত উদাহরণ খুঁজে বার করার জন্য এটি ব্যবহার করি।

আপনি এটি কলাম_নাম ফিল্টার দ্বারা INFORMATION_SCHEMA.COLUMNS থেকে খুঁজে পেতে পারেন

Select DISTINCT TABLE_NAME as TableName,COLUMN_NAME as ColumnName
     From INFORMATION_SCHEMA.COLUMNS Where column_name like '%myname%'

আশা করি এটি একটি অনুলিপি উত্তর নয়, তবে আমি যা করতে চাই তা একটি এসকিউএল বিবৃতির মধ্যে একটি এসকিউএল বিবৃতি তৈরি করে যা আমাকে যে মানগুলি সন্ধান করছে তার জন্য অনুসন্ধান করতে দেয় (শুধুমাত্র সেই ক্ষেত্রের নামগুলির সাথে টেবিলগুলি নয়) আমার জন্য প্রয়োজনীয় কলামের আইডি সম্পর্কিত কোনও তথ্য মুছে ফেলার জন্য প্রয়োজনীয়):

  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  '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  [TABLE_NAME] ,
        [INFORMATION_SCHEMA].COLUMNS.COLUMN_NAME
FROM    INFORMATION_SCHEMA.COLUMNS
WHERE   INFORMATION_SCHEMA.COLUMNS.COLUMN_NAME LIKE '%NAME%' ;

আমরা নিম্নলিখিত সিনট্যাক্স ব্যবহার করতে পারি: -

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

স্বাভাবিক ব্যবহারকারীর অনুমতিগুলির সাথে ওরাকলের জন্য:

select owner, table_name, column_name
from all_tab_columns 
where column_name 
like '%myname%';

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 table_name, column_name
from user_tab_columns where column_name like '%myname%';

এটা কাজ করে


ওরাকলের মত আপনি এই সাথে টেবিল এবং কলাম খুঁজে পেতে পারেন:

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

আমি একই উদ্দেশ্যে এই ব্যবহার এবং এটি কাজ করে:

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

সম্পূর্ণ তথ্য পেতে: কলামের নাম, টেবিল নাম এবং টেবিলের স্কিমা ..

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

আপনি যদি তৃতীয় পক্ষের সরঞ্জামগুলিতে আরো থাকেন তবে সেখানে অনেকগুলি বিকল্প রয়েছে যেমন:

আপনার ডেটাবেসে এনক্রিপ্ট হওয়া বস্তুগুলি (দর্শন, কার্যকারিতা, ফাংশন) রয়েছে এমনগুলি খুব সহজেই আসে কারণ আপনি সহজেই সিস্টেম সারণির মাধ্যমে এইগুলির জন্য অনুসন্ধান করতে পারবেন না।


আপনি যেমন কলাম খুঁজে পেতে [INFORMATION_SCHEMA].[COLUMNS] টেবিল ব্যবহার করতে পারেন

Select * From [INFORMATION_SCHEMA].[COLUMNS] Where COLUMN_NAME like '%Column%'

প্রদত্ত SQL বিবৃতির জন্য টেবিল এবং কলামের তথ্য পাওয়ার জন্য http://www.w3hattrick.com/2016/05/getting-table-and-column-information.html


আমি শুধু এটি চেষ্টা করেছি এবং এই পুরোপুরি কাজ করে

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;

শুধুমাত্র আপনার ডেটাবেসে নাম পরিবর্তন করুন এবং আপনার কলাম নামটি আপনার কলামের নামটিতে পরিবর্তন করুন যা আপনি এটির জন্য বাকিদের সন্ধান করছেন।

এই সাহায্য করেছে আশা করি


declare @ColumnName nvarchar(max)='QbId'

Select b.Name as TableName from Sys.Columns a
Join Sys.Tables b
on a.Object_Id=b.Object_Id
where a.Name[email protected]ColumnName

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'

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%'




system-tables