Как добавить auto_increment в столбец в SQL Server 2008 - PullRequest
6 голосов
/ 24 мая 2011

Я использую SQL Server 2008, и первичный ключ таблицы базы данных, которую я использую, не является столбцом IDENTITY (не знаю почему). Мне нужно это изменить.

Я нахожусь в SQL Server Management Studio в режиме конструктора, в свойствах столбца и по какой-то причине не могу изменить спецификации удостоверений на Yes.

Есть ли что-то, чего мне не хватает .. Я новичок в SQL Server - есть идеи о том, чего мне не хватает ??

Вот таблица создания

CREATE TABLE [dbo].[AR_Transactions](
       [Trans_ID] [bigint] NOT NULL,
       [DateTime] [datetime] NOT NULL,
       [Cashier_ID] [nvarchar](50) NULL,
       [CustNum] [nvarchar](12) NOT NULL,
       [Trans_Type] [nvarchar](2) NOT NULL,
       [Prev_Cust_Balance] [money] NULL,
       [Prev_Inv_Balance] [money] NULL,
       [Trans_Amount] [money] NOT NULL,
       [Payment_Method] [nvarchar](4) NULL,
       [Payment_Info] [nvarchar](20) NULL,
       [Description] [nvarchar](38) NULL,
       [Invoice_Number] [bigint] NOT NULL,
       [Store_ID] [nvarchar](10) NOT NULL,
       [Dirty] [bit] NOT NULL,
       [Station_ID] [nvarchar](5) NULL,
       [Payment_Type] [smallint] NULL,

CONSTRAINT [pkAR_Transactions] 
       PRIMARY KEY CLUSTERED([Store_ID] ASC, [Trans_ID] ASC)
           WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, 
                 ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

ALTER TABLE [dbo].[AR_Transactions] 
    ADD CONSTRAINT [DF_AR_Transactions_Trans_ID_AR_Transactions] 
    DEFAULT ((0)) FOR [Trans_ID]

ALTER TABLE [dbo].[AR_Transactions] 
    ADD CONSTRAINT [DF_AR_Transactions_Invoice_Number_AR_Transactions] 
    DEFAULT ((0)) FOR [Invoice_Number]

Вот запрос, который мне нужно выполнить ... это полный взлом, чтобы попытаться автоматически увеличить мои вставки

BEGIN TRANSACTION 

INSERT INTO 
        [cresql].[dbo].[AR_Transactions](Trans_ID, DateTime , Dirty, Store_ID, Trans_Type,  
            Cashier_ID, CustNum, Trans_Amount, Prev_Cust_Balance) 
        SELECT  
            (SELECT MAX(Trans_ID ) + 1 FROM [cresql].[dbo].[AR_Transactions]), 
            DATEADD(MINUTE, -30, Getdate()), 1, 1001, 'C', 100199, CustNum,
            -Acct_Balance, Acct_Balance 
    FROM  [cresql].[dbo].[Customer] 
        WHERE Acct_Balance <> 0  

UPDATE [cresql].[dbo].[Customer] 
    SET Acct_Balance = 0 
WHERE Acct_Balance <> 0  

COMMIT TRANSACTION

Ответы [ 5 ]

13 голосов
/ 24 мая 2011

Чтобы проиллюстрировать точку зрения Мартина:

enter image description here

И PS: - как справедливо упоминает Микаэль Эрикссон (и документы красиво), это Спецификация идентичности остается серым до тех пор, пока столбец, над которым вы работаете, имеет ограничение по умолчанию.

5 голосов
/ 24 мая 2011

Сначала удалите ограничение по умолчанию для столбца Trans_ID.Затем вы можете установить для Is Identity значение Да в конструкторе.

Это свойства для столбца Trans_ID в вашей таблице AR_Transactions.(Is Identity) отключено:

enter image description here

Удалите ограничение по умолчанию и (Is Identity) больше не отключено:

enter image description here

Установитьчтобы да и сохранить.Default Value or Binding вместо этого отключено:

enter image description here

5 голосов
/ 24 мая 2011

Вам необходимо развернуть узел «Спецификация идентичности», чтобы изменить его с помощью свойства (Is Identity).

Это перестроит таблицу, поэтому вам также может понадобиться перейти в Tools -> Options -> Designers -> Prevent saving changes that require table re-creation.

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

1 голос
/ 24 мая 2011

Вы не можете использовать ALTER TABLE ... ALTER COLUMN для изменения столбца, чтобы иметь свойство идентификатора.Вам нужно

  • удалить ограничение первичного ключа и все ограничения внешнего ключа, ссылающиеся на соответствующий столбец в вашей таблице.
  • добавить новый столбец со свойством identity.Он должен иметь тот же тип (int, я полагаю), что и существующий столбец.
  • обновить таблицу, чтобы заполнить новый столбец значениями существующего столбца.
  • изменить новыйстолбец, чтобы сделать его необнуляемым.
  • удалить старый / существующий столбец.
  • переименовать новый столбец, чтобы его имя совпадало с именем старого столбца.
  • Воссоздайте ссылки на первичный ключ и внешний ключ, которые вы сбросили на первом шаге.

Просто!Или что-то.

0 голосов
/ 31 июля 2014
CREATE TABLE [dbo].[AR_Transactions](
       [Trans_ID] [bigint] IDENTITY(1,1) NOT NULL,
       [DateTime] [datetime] NOT NULL,
       [Cashier_ID] [nvarchar](50) NULL,
       [CustNum] [nvarchar](12) NOT NULL,
       [Trans_Type] [nvarchar](2) NOT NULL,
       [Prev_Cust_Balance] [money] NULL,
       [Prev_Inv_Balance] [money] NULL,
       [Trans_Amount] [money] NOT NULL,
       [Payment_Method] [nvarchar](4) NULL,
       [Payment_Info] [nvarchar](20) NULL,
       [Description] [nvarchar](38) NULL,
       [Invoice_Number] [bigint] NOT NULL,
       [Store_ID] [nvarchar](10) NOT NULL,
       [Dirty] [bit] NOT NULL,
       [Station_ID] [nvarchar](5) NULL,
       [Payment_Type] [smallint] NULL,

CONSTRAINT [pkAR_Transactions] 
       PRIMARY KEY CLUSTERED([Store_ID] ASC, [Trans_ID] ASC)
           WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, 
                 ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

ALTER TABLE [dbo].[AR_Transactions] 
    ADD CONSTRAINT [DF_AR_Transactions_Trans_ID_AR_Transactions] 
    DEFAULT ((0)) FOR [Trans_ID]

ALTER TABLE [dbo].[AR_Transactions] 
    ADD CONSTRAINT [DF_AR_Transactions_Invoice_Number_AR_Transactions] 
    DEFAULT ((0)) FOR [Invoice_Number]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...