2016-05-30 9 views
0

Я работаю над приложением, которое мы будем использовать для поддержки нашего словаря базы данных (описание каждого столбца в каждой таблице), и хотел бы создать функцию «Обновить», которая может перейти в базу данных и получить обновленный список/имена столбцов.Идентификатор уникального столбца SQL Server

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

Есть ли уникальный идентификатор, который генерирует SQL Server для столбца, который не изменяется?

Моя альтернатива заключается в том, чтобы добавить новый столбец и пометить старый как удаленный.

Благодаря

+0

Синтаксис для перемещения столбцов отсутствует. SSMS отбрасывает и воссоздает всю таблицу, если вы это сделаете. –

+0

Спасибо, я думал, что так будет. Я просто хотел посмотреть, есть ли уникальный элемент, назначенный столбцу, который я могу проверить. –

ответ

1

Почему вы не храните описание в описании описания столбца. Затем, когда колонка будет обновлена, разработчик будет нести ответственность за ее обновление.

Я написал веб-шрифт для этого более 10 лет назад .... Я могу отправить вам код, если вы хотите? Видна:

enter image description here

+0

Спасибо. Это то, что я закончил делать. (Использование vb.net в нашем текущем программном обеспечении). Я думаю, что это лучший способ решить, поскольку он затем хранится в базе данных и использует существующую функциональность. Если вы хотите отправить код, это будет оценено, поскольку это может показать мне лучший способ его достижения (лучше кодировать?) –

0

Я хотел бы добавить новую колонку и отметьте старую, как удалить.

[править]

Я думал, что SQL сервер удалил таблицу и создать ее в первую очередь, и после вашего вопроса я пошел исследовать:

Если вы отметите опцию «Предотвращать экономии изменения, которые требуют таблицы повторного создания»(в Options -> Конструкторы -> стол и проектировщиков баз данных), а затем создать следующую таблицу:

CREATE TABLE [dbo].[testTbl](
    [colA] [nchar](10) NULL, 
    [colB] [smallint] NOT NULL 
) ON [PRIMARY] 

и даже вставить некоторые значения:

INSERT INTO dbo.testTbl 
VALUES ('text1', 12) 
,('text2', 22) 
,('text3', 32) 
,('text4', 42) 
,('text5', 52) 

а затем запустить треску е из выше вы получите:

SELECT c.object_id, OBJECT_NAME(c.object_id) AS OBJECT_NAME 
    ,c.NAME AS COLUMN_NAME 
    ,t.NAME AS DATA_TYPE 
    ,c.max_length AS MAX_LENGTH 
FROM sys.all_columns c 
INNER JOIN sys.types t ON t.system_type_id = c.system_type_id 
WHERE object_name(c.object_id) = 'testTbl' 

Вы получите следующие значения: enter image description here

Если вы пытаетесь сделать сейчас следующие изменения (в конструкторе таблиц), вы обнаружите, что все они требуют падений и создать из базы данных:
Изменить столбец NULLABLE на не-nullable
изменить столбца с нулевым значением на нулевое значение
(что и следовало ожидать; эти изменения требуют, чтобы столбцы перемещались по странице)
изменить тип данных столбца (nchar (10) более или менее, smallint to tinyint или int)
, но если вы хотите изменить столбец от B до C, SQL может управлять, и результаты будут:

enter image description here

объект идентификатор относится к таблице идентификатор, и, следовательно, таблица осталась с тем же иД объекта.

+0

Спасибо. Я бы предпочел не иметь дополнительных столбцов и пошел по пути добавления его в расширенную функцию свойств в SQL. Это позволяет мне видеть детали в моем приложении и диспетчере SQL-серверов. –

0

Вы можете попробовать это ... его составным из двух запросов:

Это поможет вам список coumns внутри таблицы:

SELECT c.object_id, OBJECT_NAME(c.object_id) AS OBJECT_NAME 
    ,c.NAME AS COLUMN_NAME 
    ,t.NAME AS DATA_TYPE 
    ,c.max_length AS MAX_LENGTH 
FROM sys.all_columns c 
INNER JOIN sys.types t ON t.system_type_id = c.system_type_id 
WHERE object_name(c.object_id) = 'TableName' 

Вы можете сгенерировать Hashcode имени столбца и объединить его с object_id ... который должен быть уникальным, если только имя колонки не было изменено

Надеюсь, это поможет.

+0

Спасибо, к сожалению, иногда имена столбцов меняются, и это проблема, с которой я сражаюсь. –

Смежные вопросы