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

Откуда: Прага
Сообщений: 10
Привет всем,

такой вопрос.

Имеются мночо значений, типа, 98357, 98356, 98355, 98354, 98353.
Есть пустая таблица, где настроен тригер, который после INSERTа значения заполняет остальные поля в таблице.

Вопрос-> как сделать общий (ну или рекурсивный) INSERT, чтобы не вбивать по одному значению. insert into tbl value.
Т.е. как запустить INSERT, чтобы он все >200 значений постепенно вкладывал в таблицу.. ну а триггер в таблице уже сам остальное дотянет?

Не могу докопаться.
Писать всякие скипрты на pythone или VB не тот путь. Хотя мне начинает казаться более легкий;) Просто хотелось бы узнать возможно ли это средствами SQL

Огромное спасибо всем за предложения ;)
3 авг 12, 19:46    [12960569]     Ответить | Цитировать Сообщить модератору
 Re: INSERT сразу нескольких значений в датабазу  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
что значит "постепенно" ? по одному?


Insert into t(f1, f2) values(v11, v21);
Insert into t(f1, f2) values(v12, v22);
Insert into t(f1, f2) values(v13, v23);


или так

Insert into t(f1, f2) select v11, v21;
Insert into t(f1, f2) select v12, v22;
Insert into t(f1, f2) select v13, v23;



или так

Insert into t(f1, f2) select v1, v2 from t2;
3 авг 12, 19:52    [12960582]     Ответить | Цитировать Сообщить модератору
 Re: INSERT сразу нескольких значений в датабазу  [new]
gni
Member

Откуда: Прага
Сообщений: 10
значения которые надо вставить не в таблице. просто...типа через запятую)

таблица в которую хотелось бы их вложить, состоит из несколькоих столбцов. И вот эти все значения хотелось бы по одному вставить в один и тот же столб ;)

По одному, в смысле, не каждый раз вызывать insert into для каждого значения, а большой порцией :)

Aавтоматом.

vals = 123, 124, 125, 126, 127
for v in vals:
insert into TBL(поле) values (v)
3 авг 12, 20:01    [12960607]     Ответить | Цитировать Сообщить модератору
 Re: INSERT сразу нескольких значений в датабазу  [new]
Shakill
Member

Откуда: мск
Сообщений: 1882
gni,

так Insert into tbl(a) values (1), (2), (3) не годится?
3 авг 12, 20:03    [12960617]     Ответить | Цитировать Сообщить модератору
 Re: INSERT сразу нескольких значений в датабазу  [new]
gni
Member

Откуда: Прага
Сообщений: 10
спасибо... ток не работает как то (

insert into tbAccess (pnum) VALUES (740848),(740847)

выкидывает ошибку

Msg 102, Level 15, State 1, Line 2
Incorrect syntax near ','.
3 авг 12, 20:14    [12960651]     Ответить | Цитировать Сообщить модератору
 Re: INSERT сразу нескольких значений в датабазу  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
gni
значения которые надо вставить не в таблице. просто...типа через запятую)

таблица в которую хотелось бы их вложить, состоит из несколькоих столбцов. И вот эти все значения хотелось бы по одному вставить в один и тот же столб ;)

По одному, в смысле, не каждый раз вызывать insert into для каждого значения, а большой порцией :)

Aавтоматом.

vals = 123, 124, 125, 126, 127
for v in vals:
insert into TBL(поле) values (v
)


вроде бы прояснилось, но этот инсерт на каком-то наречии сбивает с толку - он от по одному вставляет
3 авг 12, 20:16    [12960655]     Ответить | Цитировать Сообщить модератору
 Re: INSERT сразу нескольких значений в датабазу  [new]
gni
Member

Откуда: Прага
Сообщений: 10
Winnipuh
gni
значения которые надо вставить не в таблице. просто...типа через запятую)

таблица в которую хотелось бы их вложить, состоит из несколькоих столбцов. И вот эти все значения хотелось бы по одному вставить в один и тот же столб ;)

По одному, в смысле, не каждый раз вызывать insert into для каждого значения, а большой порцией :)

Aавтоматом.

vals = 123, 124, 125, 126, 127
for v in vals:
insert into TBL(поле) values (v
)


вроде бы прояснилось, но этот инсерт на каком-то наречии сбивает с толку - он от по одному вставляет


ну да, правильно. Я этим просто хотел показать сам процесс автоматического вложения всех имеющихся значений в поле таблицы.
3 авг 12, 20:42    [12960762]     Ответить | Цитировать Сообщить модератору
 Re: INSERT сразу нескольких значений в датабазу  [new]
Shakill
Member

Откуда: мск
Сообщений: 1882
gni
спасибо... ток не работает как то (

insert into tbAccess (pnum) VALUES (740848),(740847)

выкидывает ошибку

Msg 102, Level 15, State 1, Line 2
Incorrect syntax near ','.

ну значит версия сервера не позволяет, тогда так
insert into tbAccess (pnum) 
select (740848) union all
select (740847)
3 авг 12, 21:03    [12960848]     Ответить | Цитировать Сообщить модератору
 Re: INSERT сразу нескольких значений в датабазу  [new]
trew
Member

Откуда: Москва
Сообщений: 2646
gni,

Возможно понадобится
sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'Ad Hoc Distributed Queries', 1;
GO
RECONFIGURE;
GO


Создаем табличку, куда будем загружать файлы
CREATE TABLE [dbo].[bulk_tab](
	[my_field] [int] NULL
) ON [PRIMARY]
------ или ---------------------------------
CREATE TABLE [dbo].[bulk_tab_v](
	[my_field] varchar(20) NULL
) ON [PRIMARY]


Загружаем
DECLARE @file_csv VARCHAR(100);
SET @file_csv ='C:\test.txt'
DECLARE @SQL_CSV VARCHAR(500);
set @SQL_CSV ='BULK INSERT bulk_tab_v FROM '''+@file_csv+'''
WITH(	CODEPAGE = ''RAW'',
		FIRSTROW = 2,
		FIELDTERMINATOR = '','',
		ROWTERMINATOR = '','')'
exec(@SQL_CSV)

select * from bulk_tab_v


Файл должен лежать здесь C:\test.txt

К сообщению приложен файл (test.txt - 34bytes) cкачать
3 авг 12, 23:02    [12961133]     Ответить | Цитировать Сообщить модератору
 Re: INSERT сразу нескольких значений в датабазу  [new]
trew
Member

Откуда: Москва
Сообщений: 2646
gni,

declare @ff varchar(max)
set @ff ='956,236,125,126,1256,1589,1458,556,77555'

declare @ff_xml xml
set @ff_xml = convert(xml,'<root><field>' + replace(@ff,',','</field><field>') + '</field></root>')

select n.value('.', 'varchar(50)' ) Name1
from @ff_xml.nodes('/root/*') t(n)

10446789

declare @ff_varchar varchar(max)
set @ff_varchar = '<root><field>' + replace(@ff,',','</field><field>') + '</field></root>'

DECLARE @idoc int
DECLARE @doc varchar(max)
SET @doc =@ff_varchar

EXEC sp_xml_preparedocument @idoc OUTPUT, @doc

SELECT TOP 100 *
FROM OPENXML (@idoc, 'root/field',1)
WITH (Name nvarchar(max) 'text()')
3 авг 12, 23:49    [12961224]     Ответить | Цитировать Сообщить модератору
 Re: INSERT сразу нескольких значений в датабазу  [new]
trew
Member

Откуда: Москва
Сообщений: 2646
gni
значения которые надо вставить не в таблице. просто...типа через запятую)

таблица в которую хотелось бы их вложить, состоит из несколькоих столбцов. И вот эти все значения хотелось бы по одному вставить в один и тот же столб ;)

По одному, в смысле, не каждый раз вызывать insert into для каждого значения, а большой порцией :)

Aавтоматом.

vals = 123, 124, 125, 126, 127
for v in vals:
insert into TBL(поле) values (v)


insert into TBL(поле)
select n.value('.', 'varchar(50)' ) поле
from @ff_xml.nodes('/root/*') t(n)
3 авг 12, 23:59    [12961236]     Ответить | Цитировать Сообщить модератору
 Re: INSERT сразу нескольких значений в датабазу  [new]
gni
Member

Откуда: Прага
Сообщений: 10
приятное утро... огромное спасибо за советы... значит курсорами .... ))
как вернусь - отпишусь...
4 авг 12, 11:07    [12961690]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить