2013-08-29 3 views
0

я таблица структурирована как таковой:Изменить свойство IDENTITY через свойства первичного ключа?

PrimaryKey int set as PK 
SomeForeignKey int set as FK... linked to some other table's PK 
SomeVarChar varchar 
SomeDate datetime 

Когда я правой кнопкой мыши на свойствах моего ПК, я заметил, что Identity установлено значение False, то Identity Seed устанавливается в 0 и Identity Icrement устанавливается равным 0.

Однако я не могу изменить эти свойства. Как я могу изменить эти значения?

Вот скриншот.

enter image description here

ответ

3

Вы меняете таблицу, а не ограничение. Management Studio позаботится о других вещах для вас (обратите внимание, что он должен отказаться от таблицы и заново создать ее, поэтому, если таблица большая, будьте готовы взять кофе и поторопиться и подождать).

  • Щелкните правой кнопкой мыши таблицу в обозревателе объектов и выберите Design

enter image description here

  • Щелкните правой кнопкой мыши столбец, который вы хотите быть личность и выберите Свойства

enter image description here

В панели свойств, в разделе "Удостоверение колонке", выбрать правильный столбец:

enter image description here

Нажмите значок Сохранить (или Ctrl + S):

enter image description here

Обратите внимание, что вам также может потребоваться отменить выбор «Инструменты»> «Дизайнеры»> «Дизайнеры таблиц и баз данных»> «Предотвратить сохранение изменений, требующих повторного создания таблицы».

enter image description here

Обычно я хотел бы предложить внести изменения в схему, используя DDL вместо хоккея и ошибки охваченного GUI, но это один редкий случай, когда графический интерфейс на самом деле требует меньше работы, чем вводить необходимые команды будут ,Изменение свойства IDENTITY - это то, что DDL просто не догнал, и глупость, которую он должен сделать, чтобы обойти его, смешна (в этом случае я добавил новый столбец и записал сценарий изменений, необходимых для того, чтобы сделать тождество столбец вместо этого - и вы даже не можете увидеть всю ерунду здесь, из-за не-перезначительный диалог):

enter image description here

Вот фактический сценарий (не то, что вы, вероятно, хотите запустить очень часто, никогда ум придумал самостоятельно):

/* To prevent any potential data loss issues, you should review this script in detail 
    before running it outside the context of the database designer.*/ 
BEGIN TRANSACTION 
SET QUOTED_IDENTIFIER ON 
SET ARITHABORT ON 
SET NUMERIC_ROUNDABORT OFF 
SET CONCAT_NULL_YIELDS_NULL ON 
SET ANSI_NULLS ON 
SET ANSI_PADDING ON 
SET ANSI_WARNINGS ON 
COMMIT 
BEGIN TRANSACTION 
GO 
CREATE TABLE dbo.Tmp_foo 
    (
    ID int NOT NULL, 
    [Foo INT] int NOT NULL IDENTITY (1, 1) 
    ) ON [PRIMARY] 
GO 
ALTER TABLE dbo.Tmp_foo SET (LOCK_ESCALATION = TABLE) 
GO 
SET IDENTITY_INSERT dbo.Tmp_foo OFF 
GO 
IF EXISTS(SELECT * FROM dbo.foo) EXEC('INSERT INTO dbo.Tmp_foo (ID) 
     SELECT ID FROM dbo.foo WITH (HOLDLOCK TABLOCKX)') 
GO 
DROP TABLE dbo.foo 
GO 
EXECUTE sp_rename N'dbo.Tmp_foo', N'foo', 'OBJECT' 
GO 
ALTER TABLE dbo.foo ADD CONSTRAINT 
    PK__foo__3214EC274CF5691D PRIMARY KEY CLUSTERED 
    (ID) WITH(STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, 
     ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
GO 
COMMIT 
2

Если вы хотите изменить это свойство в Management Studio, щелкнуть правой кнопкой мыши на таблице, выберите Design, а затем выберите столбец первичного ключа, и увидеть его свойства в нижней части, где вы можете открыть раздел «Спецификация идентификации». Там вы можете отредактировать настройку «IsIdentity». Затем сохраните изменения.

+0

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

+0

@Rhs, потому что столбец IDENTITY является свойством таблицы, а не ограничением. –

+0

@Rhs На самом деле, согласно http://msdn.microsoft.com/en-us/library/ms187742.aspx, раздел «IDENTITY», «Вы не можете изменить существующий столбец таблицы, чтобы добавить свойство IDENTITY». Это означает, что Management Studio фактически работает в фоновом режиме, если вы изменяете этот параметр для существующей таблицы: переименование таблицы, создание новой с измененным параметром идентификации, копирование всех данных из переименованного оригинала в новую таблицу, а затем удаление переименованную таблицу. Это может быть дорогостоящим действием для больших таблиц, поэтому я предполагаю, что он не включен на экране свойств, на который вы ссылаетесь. – FrankPl