увеличить идентификаторы в таблице - PullRequest
0 голосов
/ 16 февраля 2011

Я хотел бы увеличить все идентификаторы в моей таблице на 1000, потому что мне нужно вставить туда данные из другой таблицы с точно такими же идентификаторами. Каков наилучший способ сделать это?

Ответы [ 3 ]

3 голосов
/ 16 февраля 2011
update dbo.table set id = id + 1000
go
0 голосов
/ 16 февраля 2011

Во-первых, как HLGEM, он кажется неверным идентификатором (подумайте о ваших внешних ключах для идентификаторов, к которым вы должны добавить 1000).

Второй dbo.table стал sys.tables в Server 2008.

Наконец, вам нужно найти столбцы внешних ключей с этим запросом:

    SELECT name,OBJECT_NAME(object_id)
    FROM sys.columns
    WHERE name like '%id' or name like 'id%' 
--depends on where is 'id' in your columns names

name: имя столбца, OBJECT_NAME: имя таблицы

И обновить всевещь (с хитрым запросом, который должен выглядеть следующим образом, но я не проверял с помощью команды "update"):

CREATE TABLE #TablesWithIds (
    columnName varchar(100),
    tableName  varchar(100)
)

Insert into #TablesWithIds
SELECT name as columnName,OBJECT_NAME(object_id) as tableName
FROM sys.columns
WHERE name like '%id%' 

update #TablesWithIds.tableName  set #TablesWithIds.columnName = #TablesWithIds.columnName +1000

drop table #TablesWithIds
0 голосов
/ 16 февраля 2011

Лучший способ - не делать этого. Вы также должны изменить все связанные записи, и если вы используете идентификационные данные, это становится еще сложнее. Если вы сделаете что-то не так, вы серьезно испортите целостность ваших данных. Я бы предположил, что данные, которые вы хотите вставить, - это данные, для которых необходимо изменить значения, и, если вам нужно вернуться к данным в другой таблице, сохраните исходный идентификатор в новом поле таблицы, которое называется что-то вроде table2id database2id. Если вы не можете изменить существующую таблицу, вы можете использовать справочную таблицу, которая имеет как старое значение идентификатора, так и новое.

Ни при каких обстоятельствах вы не должны пытаться делать что-то подобное без предварительного резервного копирования.

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