Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не работает SET IDENTITY_INSERT table ON; 
:(
    Опции темы
HappyLife
Дата 9.8.2007, 15:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 642
Регистрация: 17.5.2006

Репутация: нет
Всего: 8



Выполняю
Код
SET IDENTITY_INSERT dbo.Firms ON;
insert into Firms select * FROM gtkmain.dbo.firm_transport;
SET IDENTITY_INSERT Firms OFF;

Ошибка
Цитата
An explicit value for the identity column in table 'Firms' can only be specified when a column list is used and IDENTITY_INSERT is ON.

Убираю у таблицы Firms свойство IDENTITY , таблица копируется нормально.

PM MAIL   Вверх
SergKO
Дата 11.8.2007, 07:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 231
Регистрация: 14.3.2005

Репутация: 17
Всего: 20



Попробуйте у таблицы Firms явно указать поля. Следующий скрипт нормально отрабатывает.
Код

create table tf (id int identity(1, 1), sf varchar(50));
set identity_insert tf on;
insert into tf (id, sf) select 1, 'qqqqq';
set identity_insert tf off;
select * from tf
drop table tf;

PM MAIL   Вверх
HappyLife
Дата 13.8.2007, 11:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 642
Регистрация: 17.5.2006

Репутация: нет
Всего: 8



SergKO, Я думаю что и у меня получится, если явно указать поля. (не имею сейчас возможности проверить).
Но насколько я помню таблиц оч много и они содержат по большому числу полей.
Быть может, возможно как-нибудь получить названия всех полей?

Это сообщение отредактировал(а) HappyLife - 13.8.2007, 11:15
PM MAIL   Вверх
SergKO
Дата 14.8.2007, 06:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 231
Регистрация: 14.3.2005

Репутация: 17
Всего: 20



1. Если надо копировать все таблицы БД, то используйте репликацию.
2. Если просто несколько таблиц, то попробуйте построить динамический запрос
Код

declare @tbl table (idt int identity(1, 1), tbl1 nvarchar(128), tbl2 nvarchar(128));
declare    @sql    nvarchar(4000),
        @columns    nvarchar(4000),
        @tbl1        nvarchar(128),
        @tbl2        nvarchar(128);
    -- построить список таблиц для копирования
    insert into @tbl (tbl1, tbl2)
        select N'Table1', N'Table2';
--    для нескольких таблиц организовать цикл
--    while 1=1
--    begin
        select @columns = N'', @tbl1 = tbl1, @tbl2 = tbl2 from @tbl;
        --список полей
        select @columns = @columns + name + N','
        from syscolumns sc
        where id = object_id(@tbl1);
        -- отрезать запятую
        select @columns = substring(@columns, 1, Len(@columns)-1);
        -- построить запрос
        select @sql = N'insert into '+@tbl2+N' ('+@columns+N') select '+@columns+N' from '+@tbl1;
    
--        select @sql;
--        выполнить
        exec sp_executesql @sql;

--    end

только порядок заполнения @tbl должен быть "правильным", т.к. могут быть словарные таблицы и т.п.
PM MAIL   Вверх
HappyLife
Дата 20.8.2007, 14:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 642
Регистрация: 17.5.2006

Репутация: нет
Всего: 8



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

firm_transport - исходная таблица
Firms - конечная
Код
declare @columns  nvarchar(1000); -- объявляем переменную для хранений столбцов
set @columns = ''; -- инициализируем пустым значением
select @columns = @columns + name + N',' from syscolumns sc where id = object_id('firm_transport');  -- берем поля
select @columns = substring(@columns, 1, Len(@columns)-1); --удаляем последнюю запятую
DELETE FROM Firms;
SET IDENTITY_INSERT Firms ON;
declare @query varchar(1000); -- тут может кол-во символов меняться в зависимости от количества у вас полей.
set @query = 'insert into Firms (' + @columns + ') select ' + @columns + ' FROM firm_transport'; -- делаем запрос
execute (@query);
SET IDENTITY_INSERT Firms OFF;


Это сообщение отредактировал(а) HappyLife - 20.8.2007, 14:34
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "MS SQL"
Akina

Akina

Запрещается!

Публиковать ссылки и обсуждать взлом чего бы то ни было.

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы составления неспецифических запросов рассматриваются здесь
  • Используйте теги [code=sql][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, Akina.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MS SQL Server | Следующая тема »


 




[ Время генерации скрипта: 0.0686 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.