Как я могу идентифицировать только базовые таблицы при переборе всех таблиц в SQL smo?

Это мой код:

Server server = new Server(new ServerConnection(con));
server.ConnectionContext.Connect();

foreach (Table table in server.Databases[sqlDatabase].Tables)
{
    if (table <is a base table>)

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

SELECT TABLE_NAME FROM MyDatabase.INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE'

Однако, похоже, что у результатов, которые являются TABLE_TYPE, нет свойства Microsoft.SqlServer.Management.Smo.TableCollection. Согласно SQL, TABLE_TYPE — это либо BASE TABLE, либо VIEW, так что только две возможности.

Как определить только таблицы (а не представления)?

Цикл по TablesCollection не будет перечислять представления. Действительно, у вас есть коллекция Views как server.Databases[sqlDatabase].Views

Steve 28.05.2019 11:53
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
1
68
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Это нормально, что ты сделал. Вы можете найти представления таким образом -> WHERE TABLE_TYPE = 'VIEW', так что ваш выбор делает то, что вы хотите. Я рекомендую вам открыть студию управления или любую другую программу, которая позволяет вам запрашивать данные и запускать это:

SELECT * FROM MyDatabase.INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE'
SELECT * FROM MyDatabase.INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'VIEW'
Ответ принят как подходящий

Цикл по TablesCollection не будет перечислять представления, поэтому ваш код должен работать как есть, не беспокоясь о представлениях.

Действительно, у вас есть коллекция Views как server.Databases[sqlDatabase].Views

И в этой коллекции, как и в коллекции Таблицы, вы можете отличать свои собственные представления/таблицы от системных представлений/таблиц, используя свойство IsSystemObject

var myTables = server.Databases[sqlDatabase].Views
                    .Cast<Table> => !v.IsSystemObject));

var myViews = server.Databases[sqlDatabase].Views
                    .Cast<View>().Where(v => !v.IsSystemObject));

Другие вопросы по теме