열이 포함된 테이블 이름을 쿼리할 수 있습니까?
LIKE '%myName%'
?
질문자 :gruber
열이 포함된 테이블 이름을 쿼리할 수 있습니까?
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
SQL 서버:
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 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%'
여기에서 필터링할 where 절에서 추가 조건을 사용하도록 선택하거나 선택하지 않을 수 있는 스키마, 테이블 및 열에 대한 약간의 추가 정보를 얻을 수 있습니다. 예를 들어 값이 추가되어야 하는 필드만 보려면
and c.is_nullable = 0
다른 조건을 추가할 수 있습니다. 또한 이러한 수직 방식으로 select 절에 열을 추가하여 필요에 따라 다른 항목을 쉽게 재정렬, 제거, 이름 변경 또는 추가할 수 있었습니다. 또는 T.Name을 사용하여 테이블만 검색할 수 있습니다. 매우 사용자 정의할 수 있습니다.
즐기다.
이것은 작동해야 합니다:
SELECT name FROM sysobjects WHERE id IN ( SELECT id FROM syscolumns WHERE name like '%column_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
연결 기능이 2012년에 추가되었다는 점은 주목할 가치가 있습니다. 2008r2 및 이전 버전의 경우 +를 사용하여 문자열을 연결합니다.
이것을 게시한 이후로 나는 proc을 약간 다시 포맷했습니다. 지금은 조금 더 발전했지만 훨씬 더 지저분해 보이고(하지만 프로시저에 있으므로 절대 볼 수 없음) 형식이 더 좋습니다.
이 버전을 사용하면 관리 데이터베이스에 저장한 다음 모든 데이터베이스를 검색할 수 있습니다. @db의 @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 블로그에서 가져온 것입니다.
다음은 귀하의 질문에 대한 답변입니다.
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%';
SELECT COLUMN_NAME, TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME LIKE '%myName%'
column_name 필터로 INFORMATION_SCHEMA.COLUMNS에서 찾을 수 있습니다.
Select DISTINCT TABLE_NAME as TableName,COLUMN_NAME as ColumnName From INFORMATION_SCHEMA.COLUMNS Where column_name like '%myname%'
다음 쿼리는 '%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%'
SELECT [TABLE_NAME] , [INFORMATION_SCHEMA].COLUMNS.COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE INFORMATION_SCHEMA.COLUMNS.COLUMN_NAME LIKE '%NAME%' ;
MS SQL Server 데이터베이스에서 다음 쿼리를 사용하여 입력 텍스트가 포함된 테이블과 해당 열 이름을 가져옵니다.
SELECT t.name AS tableName, c.name AS columnName FROM sys.tables as t INNER JOIN sys.columns AS c ON t.object_id=c.object_id WHERE c.name LIKE '%<your_search_string>%'
나는 방금 그것을 시도했고 이것은 완벽하게 작동합니다
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을 찾고 있는 열 이름으로 변경하고 나머지는 그대로 유지하십시오.
도움이 되었기를 바랍니다.
나는 내 눈을 피하지 않는 테이블 과 전망 을 위해 무언가를 원했습니다.
질문
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]
결과
Type Object Column ---------------------------- BASE TABLE Table1 myName1 BASE TABLE Table2 myName2 VIEW View1 myName1 VIEW View2 myName2
SELECT TABLE_SCHEMA +'.'+ TABLE_NAME, COLUMN_NAME FROM [yourdatabase].INFORMATION_SCHEMA.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 * from INFORMATION_SCHEMA.COLUMNS where TABLE_CATALOG= 'theDatabase' and COLUMN_NAME like 'theCol%'
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%';
다음 쿼리를 시도할 수 있습니다.
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%'
바라건대 이것은 중복 답변이 아니지만 내가 원하는 값을 검색할 수 있는 sql 문 내에서 sql 문을 생성하는 것입니다(그 필드 이름이 있는 테이블뿐만 아니라 일반적으로 내가 찾고 있는 열 이름의 ID와 관련된 모든 정보를 삭제하는 데 필요합니다.
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 '으로 바꾸면 해당 ID에 대한 참조를 삭제할 수 있습니다! 이 결과를 파일에 기록할 수 있도록 만일의 경우를 대비하여 가지고 있습니다.
참고**** 삭제 문을 실행하기 전에 모든 백업 테이블을 제거했는지 확인하십시오...
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%'
위의 답변을 개선하기 위해 보기도 포함하고 스키마와 테이블/보기를 연결하여 결과를 더 명확하게 만듭니다.
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];
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
열 이름을 지정한 모든 테이블을 표시하는 SQL 쿼리:
SELECT SCHEMA_NAME(schema_id) + '.' + t.name AS 'Table Name' FROM sys.tables t INNER JOIN sys.columns c ON c.object_id = t.object_id WHERE c.name like '%ColumnName%' ORDER BY 'Table Name'
MS SQL에서 아래 줄을 작성하여 특정 테이블의 열 이름을 확인할 수 있습니다.
sp_help your_tablename
또는 먼저 쿼리 창에서 테이블 이름을 선택한 다음(스키마 및 테이블 이름 강조 표시) 아래 키 조합을 누를 수 있습니다.
Alt + F1
다음은 Sybase 데이터베이스를 위한 작업 솔루션입니다.
select t.table_name, c.column_name from systab as t key join systabcol as c where c.column_name = 'MyColumnName'
출처 : http:www.stackoverflow.com/questions/4849652/find-all-tables-containing-column-with-specified-name-ms-sql-server
application/x-www-form-urlencoded 또는 multipart/form-data? (0) | 2022.03.22 |
---|---|
C#의 숨겨진 기능? [닫은] (0) | 2022.03.22 |
Visual Studio에서 Git 사용 (0) | 2022.03.17 |
AddTransient, AddScoped 및 AddSingleton 서비스 차이점 (0) | 2022.03.17 |
언제 encodeURI / encodeURIComponent 대신 이스케이프를 사용해야합니까? (0) | 2022.03.17 |