Как проверить имена столбцов, присутствующих во всех таблицах в базе данных - PullRequest
1 голос
/ 13 марта 2019

Я пытался написать запрос, в котором я мог бы проверить, присутствуют ли определенные имена столбцов во всех таблицах в базе данных. Чтобы избежать трудностей, я пытался получить доступ ко всем таблицам одновременно и проверить, есть ли столбцы в таблицах. Мне удалось найти код ниже, чтобы получить имя таблицы:

SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE' AND TABLE_CATALOG='SAMPLE_DB_NAME'  

Я не могу проникнуть внутрь каждой таблицы и проверить имена столбцов.

Если кто-нибудь может помочь мне с запросом попасть в каждую таблицу и проверить имена столбцов, которые являются постоянными для всех таблиц.

Ответы [ 4 ]

0 голосов
/ 13 марта 2019

С помощью этого запроса вы можете получить все столбцы, присутствующие во всех таблицах

WITH DistinctColumnNames AS (
    SELECT DISTINCT Column_Name 
    FROM INFORMATION_SCHEMA.COLUMNS C
    JOIN INFORMATION_SCHEMA.TABLES T ON C.TABLE_SCHEMA = T.TABLE_SCHEMA AND C.TABLE_NAME = T.TABLE_NAME AND C.TABLE_CATALOG = T.TABLE_CATALOG
    WHERE T.TABLE_TYPE = 'BASE TABLE' AND T.TABLE_CATALOG='SAMPLE_DB_NAME' AND T.TABLE_SCHEMA = 'dbo' AND T.TABLE_NAME NOT LIKE 'sys%'
)
SELECT COLUMN_NAME
FROM DistinctColumnNames DC
WHERE NOT EXISTS (
    SELECT 1 
    FROM INFORMATION_SCHEMA.TABLES T
    WHERE T.TABLE_TYPE = 'BASE TABLE' AND T.TABLE_CATALOG='SAMPLE_DB_NAME' AND T.TABLE_SCHEMA = 'dbo' AND T.TABLE_NAME NOT LIKE 'sys%'
    AND NOT EXISTS(SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS C
        WHERE C.TABLE_NAME = T.TABLE_NAME AND C.COLUMN_NAME = DC.COLUMN_NAME
         AND T.TABLE_CATALOG='SAMPLE_DB_NAME' AND T.TABLE_SCHEMA = 'dbo')
)
0 голосов
/ 13 марта 2019

В приведенном ниже запросе будут перечислены все имена таблиц, в которых не задано ни одного конкретного поля.

SELECT distinct TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE  TABLE_CATALOG='testdb' 
and TABLE_NAME not in(
select object_name(object_id) ObjectName from sys.COLUMNS where name  in ('YourfieldName1', 'YourfieldName2')

В приведенном ниже запросе будут перечислены все имена таблиц, в которых будут найдены указанные поля.

select object_name(object_id) ObjectName, * 
from sys.COLUMNS where name  in ('YourfieldName1', 'YourfieldName2')
0 голосов
/ 13 марта 2019
--List of tables
SELECT * FROM sys.tables

--List of Columns
SELECT * FROM sys.columns

--List of Columns Tables joined
SELECT tbl.[name] AS TableName, clm.[name] AS ColumnName FROM sys.tables as tbl INNER JOIN sys.columns as clm ON tbl.[object_id] = clm.[object_id]



-You can check with the column name if the column exist in all tables 
USE MyDataBase
DECLARE @TableCount INT
DECLARE @FoundTables INT
SET @TableCount = ( SELECT COUNT(*) FROM sys.tables)
SET @FoundTables = ( SELECT COUNT(DISTINCT(tbl.[name])) AS NumberOfTables FROM sys.tables as tbl INNER JOIN sys.columns as clm ON tbl.[object_id] = clm.[object_id] WHERE clm.[name] = 'YourColumnName')

IF @FoundTables = @TableCount
 BEGIN
   PRINT 'The column is present in all tables'
 END
ELSE
 BEGIN 
   PRINT 'The column is not present in all tables'
 END
0 голосов
/ 13 марта 2019

Попробуйте

1002 *
...