Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Добавление записи  [new]
San4ooo
Member

Откуда:
Сообщений: 83
ПРивет всем

Есть временная таблица #tmp в которой хранятся разные соответственные значения для вставки в основную например(name varchar(255), value int).
Основная таблица main имеет поля (id int, varchar(255), value int), где id ключ.
Таблица main заполнена.
Как мне вставить значения из временной таблицы в основную причем в конец списка, т.е. присвоив вставляемым значениям следующие номера id?
19 авг 11, 15:56    [11147474]     Ответить | Цитировать Сообщить модератору
 Re: Добавление записи  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
CREATE TABLE main(id int IDENTITY, varchar(255), [value] int, CONSTRAINT pkMain PRIMARY KEY(id));
19 авг 11, 15:58    [11147496]     Ответить | Цитировать Сообщить модератору
 Re: Добавление записи  [new]
1d0
Member

Откуда: инфа100%
Сообщений: 2521
San4ooo
ПРивет всем

Есть временная таблица #tmp в которой хранятся разные соответственные значения для вставки в основную например(name varchar(255), value int).
Основная таблица main имеет поля (id int, varchar(255), value int), где id ключ.
Таблица main заполнена.
Как мне вставить значения из временной таблицы в основную причем в конец списка, т.е. присвоив вставляемым значениям следующие номера id?


export/import не?
19 авг 11, 16:02    [11147541]     Ответить | Цитировать Сообщить модератору
 Re: Добавление записи  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
San4ooo
Таблица main заполнена.
Очень много возни, если есть ссылки на PK из других таблиц и т.п.
По-простому, если ссылок нет:
ALTER TABLE main ADD id1 INT NOT NULL IDENTITY;
ALTER TABLE main DROP COLUMN id;
EXEC sp_rename N'main.id1', N'main.id', 'COLUMN';
ALTER TABLE ADD CONSTRAINT pkMain PRIMARY KEY(id);
19 авг 11, 16:06    [11147576]     Ответить | Цитировать Сообщить модератору
 Re: Добавление записи  [new]
San4ooo
Member

Откуда:
Сообщений: 83
iap

Я сделал так
create table tmp (name varchar(255), value int)
insert tmp
Select 'xxxx', 1 union all
Select 'xyyy', 2 union all
Select 'zzzx', 3 union all
Select 'xvvv', 4 union all

(далее мои мысли по поводу вставки из временной таблицы tmp в основную main)
insert into main(id , name, value)
select
(!вот тут должен быть запрос вставляющий последний id в main е )
t.name
t.value
from tmp
Как запрос должен быть чтобы вставить последние номера id в таблицу main?
19 авг 11, 16:07    [11147588]     Ответить | Цитировать Сообщить модератору
 Re: Добавление записи  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
iap
San4ooo
Таблица main заполнена.
Очень много возни, если есть ссылки на PK из других таблиц и т.п.
По-простому, если ссылок нет:
ALTER TABLE main ADD id1 INT NOT NULL IDENTITY;
ALTER TABLE main DROP COLUMN id;
EXEC sp_rename N'main.id1', N'main.id', 'COLUMN';
ALTER TABLE ADD CONSTRAINT pkMain PRIMARY KEY(id);

Лучше перестраховаться и взять скрипт, который генерит SSMS при навешивании на поле IDENTITY. Скрипт будет с пересозданием таблицы и переливкой данных, но отработает нормально в плане ссылочной целостности. Только надо еще на предмет триггеров поглядеть, и если что - предварительно их отрубить.
19 авг 11, 16:09    [11147612]     Ответить | Цитировать Сообщить модератору
 Re: Добавление записи  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
San4ooo, пересоздайте таблицу с IDENTITY, так проще и лучше всего. Если же это невозможно, то все становится значительно интересней и сложнее. Получить максимальный ID в принципе не проблема, потом можно пронумеровать выборку с темповой таблицы с наращиванием относительно ID. Но нужно накладывать блокировку на таблицу на случай многопользовательской работы...

Короче говоря, если есть возможность, лучше использовать IDENTITY.
19 авг 11, 16:13    [11147658]     Ответить | Цитировать Сообщить модератору
 Re: Добавление записи  [new]
1d0
Member

Откуда: инфа100%
Сообщений: 2521
kDnZP
San4ooo, пересоздайте таблицу с IDENTITY, так проще и лучше всего. Если же это невозможно, то все становится значительно интересней и сложнее. Получить максимальный ID в принципе не проблема, потом можно пронумеровать выборку с темповой таблицы с наращиванием относительно ID. Но нужно накладывать блокировку на таблицу на случай многопользовательской работы...

Короче говоря, если есть возможность, лучше использовать IDENTITY.


можно создать новую таблицу с id начинающего с того который нужен, копируем туда данные из временной - они нумеруются

затем пронумерованные запихиваем в main
19 авг 11, 17:18    [11148179]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить