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

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

Да ну?!

Код: 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
Можно ли сделать insert в таблицу без перечисления полей?
    #35300589
Serjiosan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А так значение счетчика же повторяется!!!
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
Можно ли сделать insert в таблицу без перечисления полей?
    #35300600
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторА так значение счетчика же повторяется!!!

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

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

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

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

Перечислить поля явно.
...
Рейтинг: 0 / 0
Можно ли сделать insert в таблицу без перечисления полей?
    #35301527
Serjiosan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А потом каждый раз разбираться, если в какой-то из таблиц произошли изменения в ее структуре и сравнивать порядок полей... Мне кажется надо делать динамический insert.
...
Рейтинг: 0 / 0
Можно ли сделать insert в таблицу без перечисления полей?
    #35301533
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Или отказаться от Identity.
...
Рейтинг: 0 / 0
Можно ли сделать insert в таблицу без перечисления полей?
    #35301540
Serjiosan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Можно заблокировать таблицу для пользователей на время выполнения процедуры, если да, то как это делается? по какому ключевому слову в BOL искать?
...
Рейтинг: 0 / 0
Можно ли сделать insert в таблицу без перечисления полей?
    #35301558
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет такой команды "заблокировать таблицу". Для выполнения ALTER необходима упомянутая выше Sch-M блокировка, которую и будет пытаться наложить сервер.
...
Рейтинг: 0 / 0
Можно ли сделать insert в таблицу без перечисления полей?
    #35301632
KGP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Можно ли сделать insert в таблицу без перечисления полей?
    #35302093
Serjiosan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторПри активно используеой таблице никакой уровень изоляции не поможет.
активно = постоянно занята?[/quot]

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

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

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

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

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

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

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


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