выберите имена таблиц sql, используя количество столбцов и имя

У меня в базе данных SQL Server всего 10 таблиц. Из этих 5 таблиц 21 столбец, а первые 5 столбцов и последние 3 столбца имеют одноименные имена.

Как я могу написать SQL-запрос, который выберет мне имя этих 5 таблиц.

[Выбор имен таблиц с использованием количества столбцов и имени столбца из базы данных SQL Server]

Eg :-

Имя базы данных - SampleDB

Таблицы, доступные в SampleDB:

  1. dbo.sample1
  2. dbo.sample2
  3. dbo.sample3
  4. dbo.sample4
  5. dbo.sample5
  6. dbo.sample6
  7. dbo.sample7
  8. dbo.sample8
  9. dbo.sample9
  10. dbo.sample10

В этой таблице [dbo.sample1, dbo.sample4, dbo.sample5, dbo.sample7, dbo.sample9] содержит 21 столбец каждая. Кроме того, имена первых 5 столбцов и последних 3 столбцов одинаковы для этих 5 таблиц. Мне нужен запрос, который выберет имя этих 5 таблиц.

Выход будет как

1 dbo.sample1
2 dbo.sample4
3 dbo.sample5
4 dbo.sample7
5 dbo.sample9

В этом есть смысл?


person san    schedule 24.03.2016    source источник
comment
Отредактируйте свой вопрос и предоставьте образцы данных и желаемые результаты.   -  person Gordon Linoff    schedule 24.03.2016
comment
В MS SQL вы хотите выбрать из sys.objects ... Но непонятно, о какой базе данных вы говорите   -  person j.kaspar    schedule 24.03.2016


Ответы (2)


я пишу синтаксис MS SQL 2012 Server (TSQL)

Первый шаг к решению вашей проблемы - выяснить, в каких таблицах есть поля x (21).

SELECT
    So.Name AS TableNames,
    COUNT(Sc.Name) AS FieldCounter
FROM
    Sysobjects AS So    -- List of Tables
LEFT OUTER JOIN
    SysColumns AS Sc    -- List of Fields
ON So.id = sc.ID
WHERE
    So.xtype = 'U'      -- only show for **U**ser sables
GROUP BY
    So.name
HAVING COUNT(Sc.Name) = 21 -- 21 fields in table

После этого вам необходимо сравнить имена полей.

person RoKli    schedule 24.03.2016
comment
Большое Вам спасибо. Есть ли способ отобразить количество записей в каждой таблице вместе с TableNames и FieldCounter? :) - person san; 24.03.2016

Что-то вроде этого? (в случае SQL Server)

select t.name, c.name, count(*) as duplicate_count from sys.tables t
inner join sys.columns c on c.object_id = t.object_id
group by t.name, c.name
having count(*) > 1
person sTodorov    schedule 24.03.2016