Прочитать имя схемы, имя таблицы и имя столбца из базы данных SQL и вернуться к коду C # - PullRequest
3 голосов
/ 11 декабря 2011

У меня есть БД (в SQL Server 2008 с пакетом обновления 3), и мне нужны все имена схем, имен таблиц и имен столбцов в связанной иерархии в коде C #, класс SQLElement выглядит следующим образом:

 public class SQLElement
{
    public string SchemaName { get; set; }
    public string TableName { get; set; }
    public string ColumnName { get; set; }
}

И есть список как:

List<SQLElement> SQLElementCollection = new List<SQLElement>();

Итак, как мне прочитать Имена из БД и добавить их в этот список (SQLElementCollection)?

например, предположим, что мы создаем таблицу следующим образом:

Create Table [General].[City] (
 [Id]           BIGINT          NOT NULL    IDENTITY(1, 1),
 [Title]        NVARCHAR(30)    NOT NULL    DEFAULT (N''),
 [Province_Id]  BIGINT          NOT NULL
)

и мне нужен список вроде:

[0]={SchemaName="General", TableName="City", ColumnName="Id"} 
[1]={SchemaName="General", TableName="City", ColumnName="Title"} 
[2]={SchemaName="General", TableName="City", ColumnName="Province_Id"} 

Кто-нибудь имеет представление об этом?

Edit:

На следующем шаге, как мы можем получить тип каждого столбца или связанных свойств?

Ответы [ 4 ]

6 голосов
/ 11 декабря 2011

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

SELECT t.name AS TableName,
    SCHEMA_NAME(t.schema_id) AS SchemaName,
    c.name AS ColumnName,
    tp.name as DataType
FROM sys.tables AS t
    INNER JOIN sys.columns c ON t.OBJECT_ID = c.OBJECT_ID
    INNER JOIN sys.types tp ON c.system_type_id =  tp.system_type_id
ORDER BY TableName;
2 голосов
/ 11 декабря 2011

Подключитесь к вашей базе данных и выполните следующую инструкцию:

select * 
from INFORMATION_SCHEMA.COLUMNS 
order by TABLE_SCHEMA, TABLE_NAME, ORDINAL_POSITION;

Проверьте результаты, а затем посмотрите и выберите то, что вам нужно.

1 голос
/ 11 декабря 2011

В этом запросе будут указаны все имена столбцов и схемы

.
SELECT t.name AS tblName,
SCHEMA_NAME(schema_id) AS [schemaName],
c.name AS colName
FROM sys.tables AS t
INNER JOIN sys.columns c ON t.OBJECT_ID = c.OBJECT_ID
where SCHEMA_NAME(schema_id) = 'dbo' // you can include this where clause  if you want to add additional filter to the result set, like query only tables that belong in particular db schema, or query only tables that starts with particular name (maybe prefix or sufix), etc.
ORDER BY tblName;

Вы должны выполнить вышеуказанный запрос и получить результаты в списке

0 голосов
/ 11 декабря 2011

Посмотрите на представления Information_Schema в вашей БД.В них есть все, что вы хотите, уже в них.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...