Как вставить запись в таблицу с номером строки в Transact-SQL? - PullRequest
0 голосов
/ 08 мая 2018

Я использую Microsoft SQL Server 2012 Management Studio.

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

Я придумал что-то вроде этого:

INSERT INTO [dbo].[sometable]
    SELECT 
        T.r.value('someKey[1]','char(8)') AS some_key,
        T1.r1.value('lang[1]','char(10)') AS lang,
        T1.r1.value('description[1]','char(30)') AS description,
        T1.r1.value('phone[1]','char(10)') AS phone,
        GETDATE() AS insert_time,
        NULL AS id 
    FROM 
        @xDoc.nodes('//*:SomeNode') AS T(r)
    CROSS APPLY 
        T.r.nodes('SomeList/SomeItem') AS T1(r1)    

DECLARE @id INT 

SET @id = 0 

UPDATE [dbo].[sometable] 
SET @id = id = @id + 1 

Код выше может дать идеальный результат на первый взгляд. Однако идентификатор не является постоянным, поскольку обновление SQL перезапишет идентификатор всей таблицы.

Как решить эту проблему?

Пожалуйста, сообщите мне, если какая-либо информация неясна или отсутствует.

1 Ответ

0 голосов
/ 08 мая 2018

SQL Server может генерировать для вас числа с автоматическим приращением, используя свойство Identity.

Нельзя изменить существующий столбец на столбец идентификаторов (или столбец идентификаторов на «обычный» столбец) с помощью оператора ALTER TABLE, но вы можете удалить существующий столбец id и заново создать его как identity столбец:

ALTER TABLE [dbo].[sometable]
    DROP COLUMN Id;

ALTER TABLE [dbo].[sometable]
    ADD Id int IDENTITY(1,1);

Обратите внимание, что столбцы идентификаторов не должны иметь делового значения, поскольку SQL Server гарантирует только их автоматическую генерацию. Они не гарантированно не имеют пробелов, и они не гарантированно уникальны.

SQL Server не будет повторно использовать значения, которые уже были сгенерированы, даже если оператор insert, сгенерировавший их, потерпел неудачу, но есть команда для сброса столбца identity, чтобы в следующий раз строка вставлялась в базу данных identity начнется с нового семени. Это означает, что столбец идентификаторов может иметь повторяющиеся значения.

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