Wiem, że INFORMATION_SCHEMA.TABLES podaje nazwy tabel, a sys.views podaje nazwy widoków. Ale nie mogę uzyskać obu w jednym wyniku zapytania. Każda pomoc jest mile widziana.

0
Srivatsa Balaji 2 kwiecień 2020, 11:40

4 odpowiedzi

Najlepsza odpowiedź

sys.views (sys.views (Transact-SQL)) nie podaje listy nazw kolumn, ale (co nie jest zaskakujące) podaje listę VIEW obiektów w Baza danych:

Zawiera wiersz dla każdego obiektu widoku z sys.objects.type = V.

Chcesz (odpowiednio nazwany) INFORMATION_SCHEMA.COLUMNS lub wykonać JOIN od sys.tables do sys.columns w object_id.


To jedno słowo, które zmieniłeś, całkowicie zmienia pytanie. Zamiast tego chcesz teraz sys.objects:

SELECT [name]
FROM sys.objects o
WHERE [type] IN ('U','V');

'U' oznacza tabelę użytkowników, a 'V' oznacza widok.

2
Dale K 2 kwiecień 2020, 09:20

Możesz wypróbować ten SQL:

SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE' AND TABLE_CATALOG='dbName'
0
ikos23 2 kwiecień 2020, 13:53

Poniższa procedura systemowa spowoduje pobranie wszystkich nazw tabel i widoków. Przeczytaj więcej na sp_tables

sp_tables

Możesz także filtrować listę za pomocą znaków wieloznacznych.

sp_tables 'tablename%'

Dodatkowe informacje: istnieje odpowiednia procedura dla listy procedur składowanych sp_stored_procedures

0
Venkataraman R 2 kwiecień 2020, 08:50

Twoje rozumienie INFORMATION_SCHEMA.TABLES jest nieprawidłowe. Ma zarówno tabele, jak i widoki - wbrew nazwie.

Jeśli chcesz jednego lub drugiego typu, zaznacz TABLE_TYPE, który może być 'VIEW' lub 'BASE_TABLE'.

Więc robi to, co chcesz:

select t.*
from information_schema.tables t;
1
Gordon Linoff 2 kwiecień 2020, 11:23