Комментарии к SQL для создания таблицы на SQL Server 2008 - PullRequest
25 голосов
/ 03 января 2011

Мне нужно создать несколько довольно больших таблиц в SQL Server 2008, хотя у меня есть SQL Server Management Studio, я хотел бы комментировать таблицы и столбцы при создании таблицы.Как мне это сделать?

Пример запроса, который я выполняю:

CREATE TABLE cert_Certifications
(
  certificationID int PRIMARY KEY IDENTITY,
  profileID int,
  cprAdultExp datetime null
)

Я пробовал COMMENT'Expiration Date for CPR для взрослых 'и COMMENT =' Срок действия CPR для взрослых 'после данныхтипа, и SQL Server выдает мне ошибку.

Ответы [ 7 ]

34 голосов
/ 03 января 2011

Это то, что я использую

/*==============================================================*/
/* Table: TABLE_1                                               */
/*==============================================================*/
create table TABLE_1 (
   ID                   int                  identity,
   COLUMN_1             varchar(10)          null,
   COLUMN_2             varchar(10)          null,
   constraint PK_TABLE_1 primary key nonclustered (ID)
)
go

declare @CurrentUser sysname
select @CurrentUser = user_name()
execute sp_addextendedproperty 'MS_Description', 
   'This is my table comment',
   'user', @CurrentUser, 'table', 'TABLE_1'
go

declare @CurrentUser sysname
select @CurrentUser = user_name()
execute sp_addextendedproperty 'MS_Description', 
   'This is the primary key comment',
   'user', @CurrentUser, 'table', 'TABLE_1', 'column', 'ID'
go

declare @CurrentUser sysname
select @CurrentUser = user_name()
execute sp_addextendedproperty 'MS_Description', 
   'This is column one comment',
   'user', @CurrentUser, 'table', 'TABLE_1', 'column', 'COLUMN_1'
go

declare @CurrentUser sysname
select @CurrentUser = user_name()
execute sp_addextendedproperty 'MS_Description', 
   'This is column 2 comment',
   'user', @CurrentUser, 'table', 'TABLE_1', 'column', 'COLUMN_2'
go
25 голосов
/ 03 января 2011

Вы можете размещать комментарии как к таблицам, так и к столбцам, создавая так называемые Расширенные свойства.Вы можете разместить расширенные свойства как на уровне таблицы, так и на уровне столбца.Это можно сделать через T-SQL или SSMS.

Например, в T-SQL это выглядит примерно так:

sp_addextendedproperty 'BackColor', 'Red', 'user', '<schema name>', 'table', '<table name', 'column', '<column name>'.

Подробнее об этом можно прочитать здесь

14 голосов
/ 04 января 2011

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

10 голосов
/ 10 декабря 2015

В этом посте есть хорошие ответы. Добавив, что значение 'MS_Description' могло бы быть другим. Например, мы можем использовать «SourceDescription» для подробной информации об источнике данных, «TableDescription» для таблицы и «ColumnDescription» для каждого столбца в таблице.

Пример:

-- Create example table
create table testTablename(
    id int,
    name varchar(20),
    registerNumber bigint
)

-- SourceDescription
EXEC sys.sp_addextendedproperty 
    @name=N'SourceDescription', 
    @value=N'Result of process x union y ' , -- Comment about the source this data. 
    @level0type=N'SCHEMA',
    @level0name=N'dbo', 
    @level1type=N'TABLE',
    @level1name=N'testTableName' -- Name of Table

-- TableDescription
EXEC sys.sp_addextendedproperty 
    @name=N'TableDescription', 
    @value=N'Table is used for send email to clients.' , -- Coment about the used of table
    @level0type=N'SCHEMA',
    @level0name=N'dbo', 
    @level1type=N'TABLE',
    @level1name=N'testTableName'

-- ColumnDescription
EXECUTE sp_addextendedproperty 
    @name = 'ColumnDescription', 
    @value = 'Unique identification of employer. Its the registry of company too.', 
    @level0type = 'SCHEMA', 
    @level0name= N'dbo', 
    @level1type = N'TABLE', 
    @level1name = N'testTableName', 
    @level2type = N'COLUMN', 
    @level2name = N'registerNumber'

-- If necessary, you can delete the comment.
exec sp_dropextendedproperty
    @name = 'ColumnDescription', 
    @level0type = 'SCHEMA', 
    @level0name= N'dbo', 
    @level1type = N'TABLE', 
    @level1name = N'testTableName', 
    @level2type = N'COLUMN', 
    @level2name = N'registerNumber'


-- Show you the table resume
select 
    tables.name tableName,
    tables.create_date,
    tables.modify_date,
    tableDesc.value TableDescription,
    sourceDesc.value SourceDescription
from 
    sys.tables  
    left join sys.extended_properties tableDesc on tables.object_id = tableDesc.major_id and tableDesc.name = 'TableDescription'
    left join sys.extended_properties sourceDesc on tables.object_id = sourceDesc.major_id and sourceDesc.name = 'SourceDescription'
where 
    tableDesc.name in('TableDescription', 'SourceDescription', 'ColumnDescription')
order by tables.name


-- show you the columns resume
select 
    tables.name tableName,
    columns.name columnName,
    extended_properties.value
from 
    sys.tables 
    inner join sys.columns on tables.object_id = columns.object_id
    left join sys.extended_properties on 
        tables.object_id = extended_properties.major_id 
        and columns.column_id = extended_properties.minor_id
        and extended_properties.name in('MS_Description','ColumnDescription')
where
    tables.name = 'testTableName'
2 голосов
/ 03 января 2011

Вам нужно использовать хранимую процедуру с именем sp_addextendedproperty для добавления комментариев к столбцам / таблицам на Sql Server.

0 голосов
/ 28 декабря 2018

Хотя это не дает прямого ответа на первоначальный вопрос (J Henzel и Randy Minder уже ответили!) Я хотел бы поделиться чем-то еще, что я только что написал, что может быть очень полезно для тех, кто должен комментировать множество таблиц и столбцов.

Следующие запросы:

-- Generate comments templates for all tables
SELECT 
'EXEC sys.sp_addextendedproperty
    @name=N''TableDescription'',
    @level0type=N''SCHEMA'',    
    @level1type=N''TABLE'',
    @level0name=N''' + TABLE_SCHEMA + ''',
    @level1name=N''' + TABLE_NAME + ''',
    @value=N''TODO'';'
FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_TYPE='BASE TABLE'
AND TABLE_NAME NOT like 'sys%'
order by TABLE_SCHEMA, TABLE_NAME


-- Generate comments templates for all columns
SELECT 'EXECUTE sp_addextendedproperty 
    @name = ''ColumnDescription'', 
    @level0type = ''SCHEMA'', 
    @level1type = N''TABLE'', 
    @level2type = N''COLUMN'', 
    @level0name=N''' + TABLE_SCHEMA + ''',
    @level1name=N''' + TABLE_NAME + ''',
    @level2name = N''' + COLUMN_NAME + ''',
    @value = ''TODO'';'
FROM   INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA not like 'sys%' and TABLE_NAME not like 'sysdiagrams%'
  order by TABLE_SCHEMA, TABLE_NAME, case when ORDINAL_POSITION = 1 then '0' else COLUMN_NAME end

В SQL Server выведет список вызовов sp_addextendedproperty для всех таблиц и всех столбцов, существующих в вашей базе данных , путем запроса системных таблиц для их сбора.

Конечно, он не будет магически комментировать его для вас, но, по крайней мере, вам просто нужно заполнить заполнители "TODO" соответствующим комментарием для всех объектов, которые вы хотели бы описать и выполнить.

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

Дополнительные замечания: Просто следите за фильтрами в WHERE на «sys», это здесь, чтобы исключить системные объекты, но в зависимости от имен ваших объектов вам может потребоваться небольшая тонкая настройка ваших таблиц с одинаковым именем.

Кроме того, в моей БД вообще нет комментариев, поэтому мой запрос возвращает все таблицы / столбцы, он не учитывает, есть ли уже комментарий или его нет.

0 голосов
/ 07 марта 2013

используйте эту команду sql

Create table TABLE NAME (ATTRIBUTE NAME (ATTRIBUTE SIZE)) // оба create и table являются ключевыми словами

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