Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Можно ли сделать insert в таблицу без перечисления полей? / 25 сообщений из 29, страница 1 из 2
07.05.2008, 17:22
    #35300530
Serjiosan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли сделать insert в таблицу без перечисления полей?
SQL server 2000
Делаю процедуру по восстановлению данных. Есть таблица [Заказы], в ней есть поле [КодЗаказа] [int] IDENTITY(1,1) NOT NULL, в эту таблицу необходимо вставить запись из архива, причем [КодЗаказа] оставить "старый".
...
Рейтинг: 0 / 0
07.05.2008, 17:24
    #35300538
pkarklin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли сделать insert в таблицу без перечисления полей?
Нет. Дополнительно потребуется установить для этой таблицы SET IDENTITY_INSERT в ON.
...
Рейтинг: 0 / 0
07.05.2008, 17:26
    #35300546
Serjiosan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли сделать insert в таблицу без перечисления полей?
SET IDENTITY_INSERT dbo.Заказы ON
INSERT INTO dbo.Заказы(КодЗаказа, и т.д.)
SELECT * FROM ЦАО.dbo.Заказы WHERE КодЗаказа=@KodZakaza
SET IDENTITY_INSERT dbo.Заказы OFF

Все работает.
Можно ли сделать процедуру без перечисления полей, т.к. возможно добавление новых полей, помимо этой таблицы такую же вставку делаю в другие таблицы (хочется сократить текст процедуры)?
...
Рейтинг: 0 / 0
07.05.2008, 17:30
    #35300559
pkarklin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли сделать insert в таблицу без перечисления полей?
авторВсе работает.

Да ну?!

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
CREATE TABLE T1(col1 int identity( 1 , 1 ))
GO

INSERT T1 DEFAULT VALUES
GO

SET IDENTITY_INSERT T1 ON
GO

INSERT T1 SELECT * FROM T1
GO

SET IDENTITY_INSERT T1 OFF
GO

DROP TABLE T1


( 1  row(s) affected)

Server: Msg  8101 , Level  16 , State  1 , Line  2 
An explicit value for the identity column in table 'T1' can only be specified when a column list is used and IDENTITY_INSERT is ON.
...
Рейтинг: 0 / 0
07.05.2008, 17:39
    #35300589
Serjiosan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли сделать insert в таблицу без перечисления полей?
А так значение счетчика же повторяется!!!
CREATE TABLE T1(col1 int identity(1,1))
GO

INSERT T1 DEFAULT VALUES
GO

SET IDENTITY_INSERT T1 ON
GO

--INSERT T1 SELECT * FROM T1
--GO

INSERT T1 (col1) VALUES (10)

SET IDENTITY_INSERT T1 OFF
GO

select * from T1

--DROP TABLE T1
...
Рейтинг: 0 / 0
07.05.2008, 17:41
    #35300600
pkarklin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли сделать insert в таблицу без перечисления полей?
авторА так значение счетчика же повторяется!!!

1. Это просто пример, чтобы показать Вам, что не работает.
2. Свойство IDENTITY само по себе уникальность значений не обеспечивает.
...
Рейтинг: 0 / 0
07.05.2008, 17:52
    #35300640
Serjiosan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли сделать insert в таблицу без перечисления полей?
Мне надо восстановить уже убитый заказ с его старым кодом заказа, поэтому я и ставлю
SET IDENTITY_INSERT dbo.Заказы ON
Вопрос был можно сделать вставку без перечисления полей?
Пока я пришел к тому, что можно делать вставку без перечисления, есть снять с поля [КодЗаказа] [int] IDENTITY(1,1) NOT NULL и сделать его [КодЗаказа] [int] NOT NULL и соответственно не надо устанавливать SET IDENTITY_INSERT dbo.Заказы ON. Но это мне кажется рисковый подход и такие манипуляции с базой можно делать только когда все пользователи отключены.
...
Рейтинг: 0 / 0
07.05.2008, 17:54
    #35300648
pkarklin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли сделать insert в таблицу без перечисления полей?
авторВопрос был можно сделать вставку без перечисления полей?

Ответ был дан в первом ответе в этом посте.
...
Рейтинг: 0 / 0
07.05.2008, 17:58
    #35300664
KGP
KGP
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли сделать insert в таблицу без перечисления полей?
SerjiosanНо это мне кажется рисковый подход и такие манипуляции с базой можно делать только когда все пользователи отключены.

повысьте уровень изоляции
ps: а использование * - это лень или попытка унифицировать операцию?
...
Рейтинг: 0 / 0
07.05.2008, 18:00
    #35300684
pkarklin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли сделать insert в таблицу без перечисления полей?
Для "снятия" свойства identity необходим промежуточный столбец или таблица. Для таких манипуляций нужна Sch-M блокировка, которая несовместима ни с какой другой. При активно используеой таблице никакой уровень изоляции не поможет.
...
Рейтинг: 0 / 0
07.05.2008, 18:15
    #35300729
Serjiosan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли сделать insert в таблицу без перечисления полей?
повысьте уровень изоляции
ps: а использование * - это лень или попытка унифицировать операцию? - Это попытка унификации, но я так полагаю что тут не обойтись без динамического insert...
...
Рейтинг: 0 / 0
07.05.2008, 18:17
    #35300736
Serjiosan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли сделать insert в таблицу без перечисления полей?
повысьте уровень изоляции - какие еще варианты повышения уровня изоляции?
...
Рейтинг: 0 / 0
07.05.2008, 19:12
    #35300844
Crimean
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли сделать insert в таблицу без перечисления полей?
> Можно ли сделать процедуру без перечисления полей,
> т.к. возможно добавление новых полей,

а вот это будет большой граблей, которая больно стукнет потом
...
Рейтинг: 0 / 0
08.05.2008, 09:44
    #35301515
Serjiosan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли сделать insert в таблицу без перечисления полей?
Так как правильно сделать, чтобы не наступать потом на грабли?
...
Рейтинг: 0 / 0
08.05.2008, 09:45
    #35301520
pkarklin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли сделать insert в таблицу без перечисления полей?
SerjiosanТак как правильно сделать, чтобы не наступать потом на грабли?

Перечислить поля явно.
...
Рейтинг: 0 / 0
08.05.2008, 09:50
    #35301527
Serjiosan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли сделать insert в таблицу без перечисления полей?
А потом каждый раз разбираться, если в какой-то из таблиц произошли изменения в ее структуре и сравнивать порядок полей... Мне кажется надо делать динамический insert.
...
Рейтинг: 0 / 0
08.05.2008, 09:52
    #35301533
pkarklin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли сделать insert в таблицу без перечисления полей?
Или отказаться от Identity.
...
Рейтинг: 0 / 0
08.05.2008, 09:55
    #35301540
Serjiosan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли сделать insert в таблицу без перечисления полей?
Можно заблокировать таблицу для пользователей на время выполнения процедуры, если да, то как это делается? по какому ключевому слову в BOL искать?
...
Рейтинг: 0 / 0
08.05.2008, 10:03
    #35301558
pkarklin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли сделать insert в таблицу без перечисления полей?
Нет такой команды "заблокировать таблицу". Для выполнения ALTER необходима упомянутая выше Sch-M блокировка, которую и будет пытаться наложить сервер.
...
Рейтинг: 0 / 0
08.05.2008, 10:23
    #35301632
KGP
KGP
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли сделать insert в таблицу без перечисления полей?
SerjiosanМожно заблокировать таблицу для пользователей на время выполнения процедуры, если да, то как это делается? по какому ключевому слову в BOL искать?

оберните транзакцией

Код: plaintext
1.
2.
3.
4.
5.
begin tran
SET IDENTITY_INSERT T1 ON
INSERT INTO ...
SET IDENTITY_INSERT T1 OFF
commit tran

правда, как писал pkarklin на время выполнения этого таблица будет блокирована не только на модификацию, но и чтение.

авторПри активно используеой таблице никакой уровень изоляции не поможет.
активно = постоянно занята?
...
Рейтинг: 0 / 0
08.05.2008, 12:11
    #35302093
Serjiosan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли сделать insert в таблицу без перечисления полей?
авторПри активно используеой таблице никакой уровень изоляции не поможет.
активно = постоянно занята?[/quot]

Нет, ночью или в выходные свободна. Время есть когда можно восстановить заказ, но я хотел сделать, чтобы в любое время можно было восстанавливать заказ.
...
Рейтинг: 0 / 0
08.05.2008, 12:43
    #35302213
pkarklin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли сделать insert в таблицу без перечисления полей?
KGP авторПри активно используеой таблице никакой уровень изоляции не поможет.
активно = постоянно занята?

Да. Если будеть длительно висеть лок.
...
Рейтинг: 0 / 0
08.05.2008, 14:45
    #35302630
KGP
KGP
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли сделать insert в таблицу без перечисления полей?
Serjiosan авторПри активно используеой таблице никакой уровень изоляции не поможет.
активно = постоянно занята?

Нет, ночью или в выходные свободна. Время есть когда можно восстановить заказ, но я хотел сделать, чтобы в любое время можно было восстанавливать заказ.[/quot]

это можно запускать в 'любое время', не думаю, что эта таблица 'так сильно занята'
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
28.02.2020, 16:21
    #39932279
Можно ли сделать insert в таблицу без перечисления полей?
Здравствуйте!

Скажите, а в SQL Server 2017 можно вставить данные с помощью INSERT без перечисления столбцов таблицы?
...
Рейтинг: 0 / 0
28.02.2020, 16:26
    #39932285
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли сделать insert в таблицу без перечисления полей?
Борис Гаркун
Здравствуйте!

Скажите, а в SQL Server 2017 можно вставить данные с помощью INSERT без перечисления столбцов таблицы?

как и раньше если нет identity/timestamp/rowversion и может ещё чего
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Можно ли сделать insert в таблицу без перечисления полей? / 25 сообщений из 29, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]