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

Откуда:
Сообщений: 57
нужно преобразовывать cast или convert.. извлекаемые данные из xml в datetime.. как это сделать на примере моей хп:

...
OPENXML (@docHandle, '/user_info//updates', 2)
     WITH (	usr_file_date datetime '//USR_FILE/@date', -- если делать так то выдает в процессе вставки ошибку переполнения..
поэтому пришлось сделать поля с датами и временем типа varchar, но это неприемлимо.

			usr_file_time varchar (20) '//USR_FILE/@time',
			usr_file_kind varchar (50) '//USR_FILE/@kind',
			info_cod_date varchar (20) '//info.cod/@date',
			info_cod_time varchar (20) '//info.cod/@time',
			consult_tor_date varchar (20) '//consult.tor/@date',
			consult_tor_time varchar (20) '//consult.tor/@time',
		
...
17 май 11, 18:08    [10666984]     Ответить | Цитировать Сообщить модератору
 Re: преобразовывать вставляемые данные в datetime в процедуре OpenXML  [new]
Prolog
Member

Откуда: Москва
Сообщений: 2793
select
  usr_file_time = convert(datetime,usr_file_time,...),
  ...
OPENXML (@docHandle, '/user_info//updates', 2)
     WITH (		usr_file_time varchar (20) '//USR_FILE/@time',
			usr_file_kind varchar (50) '//USR_FILE/@kind',
			info_cod_date varchar (20) '//info.cod/@date',
			info_cod_time varchar (20) '//info.cod/@time',
			consult_tor_date varchar (20) '//consult.tor/@date',
			consult_tor_time varchar (20) '//consult.tor/@time',
		
17 май 11, 18:39    [10667152]     Ответить | Цитировать Сообщить модератору
 Re: преобразовывать вставляемые данные в datetime в процедуре OpenXML  [new]
Bulat2
Member

Откуда:
Сообщений: 57
Prolog,
а как данные из узлов сконвертить в datetime?? вы же написали почему то названия полей в convert
18 май 11, 09:23    [10669113]     Ответить | Цитировать Сообщить модератору
 Re: преобразовывать вставляемые данные в datetime в процедуре OpenXML  [new]
Сон Веры Павловны
Member

Откуда:
Сообщений: 6201
А чем/как у вас формируется XML для передачи в ХП? Просто если его формировать средствами MSSQL (select .. for xml ...), то упаковка типа datetime в xml-представление, и распаковка оттуда не требуют никаких доп. преобразований.
18 май 11, 10:11    [10669278]     Ответить | Цитировать Сообщить модератору
 Re: преобразовывать вставляемые данные в datetime в процедуре OpenXML  [new]
Bulat2
Member

Откуда:
Сообщений: 57
Сон Веры Павловны,

XML документ передается в хп в виде текста параметром из дельфи.. а дальше уже в хп его OpenXML разбрасывает по таблице
18 май 11, 10:18    [10669318]     Ответить | Цитировать Сообщить модератору
 Re: преобразовывать вставляемые данные в datetime в процедуре OpenXML  [new]
Glory
Member

Откуда:
Сообщений: 104751
Bulat2
а как данные из узлов сконвертить в datetime?? вы же написали почему то названия полей в convert

А разве вы не ставите узлам в соответствие эти самые имена ?
Вот это - usr_file_time varchar (20) '//USR_FILE/@time' - что по вашему ?
18 май 11, 10:20    [10669334]     Ответить | Цитировать Сообщить модератору
 Re: преобразовывать вставляемые данные в datetime в процедуре OpenXML  [new]
Bulat2
Member

Откуда:
Сообщений: 57
причем если я в таблице в одном из полей которое содержит дату и время ставлю тип datetime вместо varchar и передаю туда из openxml дату в виде varchar то он как-то сам преобразует ее в datetime.. но такое срабатывает максимум если вставка идет в 2 подобных столбца.. а если больше то выдает ошибку преобразования строки в тип datetime
18 май 11, 10:22    [10669342]     Ответить | Цитировать Сообщить модератору
 Re: преобразовывать вставляемые данные в datetime в процедуре OpenXML  [new]
Bulat2
Member

Откуда:
Сообщений: 57
Glory,

ставлю. н окак мне вот это '//USR_FILE/@time' сконвертить в datetime???
18 май 11, 10:23    [10669351]     Ответить | Цитировать Сообщить модератору
 Re: преобразовывать вставляемые данные в datetime в процедуре OpenXML  [new]
Glory
Member

Откуда:
Сообщений: 104751
Bulat2
Glory,

ставлю. н окак мне вот это '//USR_FILE/@time' сконвертить в datetime???

Вам же показали, как это сделать
18 май 11, 10:24    [10669355]     Ответить | Цитировать Сообщить модератору
 Re: преобразовывать вставляемые данные в datetime в процедуре OpenXML  [new]
Bulat2
Member

Откуда:
Сообщений: 57
Bulat2,

я имею в виду данные из '//USR_FILE/@time' сконвертить в datetime
18 май 11, 10:24    [10669356]     Ответить | Цитировать Сообщить модератору
 Re: преобразовывать вставляемые данные в datetime в процедуре OpenXML  [new]
Glory
Member

Откуда:
Сообщений: 104751
Bulat2
Bulat2,

я имею в виду данные из '//USR_FILE/@time' сконвертить в datetime


select  usr_file_time = convert(datetime,usr_file_time,...),
18 май 11, 10:25    [10669365]     Ответить | Цитировать Сообщить модератору
 Re: преобразовывать вставляемые данные в datetime в процедуре OpenXML  [new]
Bulat2
Member

Откуда:
Сообщений: 57
Glory,

а что там после 3 точек может быть? какие-то доп параметры?
18 май 11, 10:26    [10669372]     Ответить | Цитировать Сообщить модератору
 Re: преобразовывать вставляемые данные в datetime в процедуре OpenXML  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2423
Bulat2,

преобразуйте в дельфи дату в формат 126 тогда не придется извращатся при чтении xml
18 май 11, 10:34    [10669425]     Ответить | Цитировать Сообщить модератору
 Re: преобразовывать вставляемые данные в datetime в процедуре OpenXML  [new]
Bulat2
Member

Откуда:
Сообщений: 57
WarAnt,

я же передаю в виде текста xml документ в хп. т.е. фактически дельфи не причем?
18 май 11, 10:38    [10669448]     Ответить | Цитировать Сообщить модератору
 Re: преобразовывать вставляемые данные в datetime в процедуре OpenXML  [new]
Glory
Member

Откуда:
Сообщений: 104751
Bulat2
Glory,

а что там после 3 точек может быть? какие-то доп параметры?

Открыть хелп и прочитать про эти самые параметры что вам мешает ?
Или нужно угадать, что вы там записали в своем xml под видом даты ?
18 май 11, 10:38    [10669457]     Ответить | Цитировать Сообщить модератору
 Re: преобразовывать вставляемые данные в datetime в процедуре OpenXML  [new]
Bulat2
Member

Откуда:
Сообщений: 57
Glory,

Сообщение 8101, уровень 16, состояние 1, процедура spARB, строка 10
Значение столбца идентификаторов в таблице "dbo.usr_cons" может указываться явно только при использовании списка столбцов и когда IDENTITY_INSERT установлен в ON.

эта ошибка значит то что явно нужно перечислить все поля как в этом случае:
select usr_file_time = convert(datetime,usr_file_time,...), ?

спасибо всем кто помогает разобраться в ms sql. ) очень выручаете
18 май 11, 10:53    [10669584]     Ответить | Цитировать Сообщить модератору
 Re: преобразовывать вставляемые данные в datetime в процедуре OpenXML  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2423
Bulat2
WarAnt,

я же передаю в виде текста xml документ в хп. т.е. фактически дельфи не причем?


и что дельфи не позволяет вставлять строку в xml в формате yyyy-mm-ddThh:mm:ss:mmm?
18 май 11, 11:09    [10669732]     Ответить | Цитировать Сообщить модератору
 Re: преобразовывать вставляемые данные в datetime в процедуре OpenXML  [new]
Glory
Member

Откуда:
Сообщений: 104751
Bulat2
Glory,

Сообщение 8101, уровень 16, состояние 1, процедура spARB, строка 10
Значение столбца идентификаторов в таблице "dbo.usr_cons" может указываться явно только при использовании списка столбцов и когда IDENTITY_INSERT установлен в ON.

эта ошибка значит то что явно нужно перечислить все поля как в этом случае:
select usr_file_time = convert(datetime,usr_file_time,...), ?

спасибо всем кто помогает разобраться в ms sql. ) очень выручаете

Это означает, что вы здесь пишите один запрос, а у себя выполняете другой
Потому что приведенный вам select никак не может добавлять куда-то данные
18 май 11, 11:16    [10669792]     Ответить | Цитировать Сообщить модератору
 Re: преобразовывать вставляемые данные в datetime в процедуре OpenXML  [new]
Bulat2
Member

Откуда:
Сообщений: 57
insert into dbo.usr_cons (usr_file_date,
		  usr_file_time, usr_file_kind, info_cod_date, info_cod_time,
		  consult_tor_date, consult_tor_time, netCount, system,
		  vDistr, nDistr, nComp, directory, nCat, nTexts,
		  n3,n4,n5, n6, compliance, u1_date, u1_time, u1_sysdate,
		  u1_docs, u1_kind, u2_date, u2_time, u2_sysdate,
		  u2_docs, u2_kind, u3_date, u3_time, u3_sysdate,
		  u3_docs, u3_kind, u4_date, u4_time, u4_sysdate,
		  u4_docs, u4_kind, u5_date, u5_time, u5_sysdate,
		  u5_docs, u5_kind, u6_date, u6_time, u6_sysdate,
		  u6_docs, u6_kind, u7_date, u7_time, u7_sysdate,
		  u7_docs, u7_kind, u8_date, u8_time, u8_sysdate,
		  u8_docs, u8_kind, u9_date, u9_time, u9_sysdate,
		  u9_docs, u9_kind, u10_date, u10_time, u10_sysdate,
		  u10_docs, u10_kind, version, name_file) 

SELECT  		  
usr_file_date = convert(datetime,usr_file_date, 104),
		  usr_file_time = convert(datetime, REPLACE(usr_file_time, '.', ':'), 104), 
		  usr_file_kind, 
		  info_cod_date = convert(datetime,info_cod_date, 104), 
		  info_cod_time = convert(datetime, REPLACE(info_cod_time, '.', ':'), 104),
		  consult_tor_date = convert(datetime,consult_tor_date, 104),
		  consult_tor_time = convert(datetime, REPLACE(consult_tor_time,'.',':'), 104), 
		  netCount, system,
		  vDistr, nDistr, nComp, directory, nCat, nTexts,
		  n3,n4,n5, n6, compliance, 
		  u1_date = convert(datetime,u1_date, 104), 
		  u1_time = convert(datetime, REPLACE(u1_time,'.',':'), 104), 
		  u1_sysdate = convert(datetime,u1_sysdate, 104),
		  u1_docs, u1_kind, 
		  u2_date = convert(datetime,u2_date, 104), 
		  u2_time = convert(datetime, REPLACE(u2_time,'.',':'), 104), 
		  u2_sysdate = convert(datetime,u2_sysdate, 104),
		  u2_docs, u2_kind, 
		  u3_date = convert(datetime,u3_date, 104), 
		  u3_time = convert(datetime, REPLACE(u3_time,'.',':'), 104), 
		  u3_sysdate = convert(datetime,u3_sysdate, 104),
		  u3_docs, u3_kind, 
		  u4_date = convert(datetime,u4_date, 104), 
		  u4_time = convert(datetime, REPLACE(u4_time,'.',':'), 104), 
		  u4_sysdate = convert(datetime,u4_sysdate, 104),
		  u4_docs, u4_kind, 
		  u5_date = convert(datetime,u5_date, 104), 
		  u5_time = convert(datetime, REPLACE(u5_time,'.',':'), 104), 
		  u5_sysdate = convert(datetime,u5_sysdate, 104),
		  u5_docs, u5_kind, 
		  u6_date = convert(datetime,u6_date, 104), 
		  u6_time = convert(datetime, REPLACE(u6_time,'.',':'), 104), 
		  u6_sysdate = convert(datetime,u6_sysdate, 104),
		  u6_docs, u6_kind, 
		  u7_date = convert(datetime,u7_date, 104), 
		  u7_time = convert(datetime, REPLACE(u7_time,'.',':'), 104), 
		  u7_sysdate = convert(datetime,u7_sysdate, 104),
		  u7_docs, u7_kind, 
		  u8_date = convert(datetime,u8_date, 104), 
		  u8_time = convert(datetime, REPLACE(u8_time,'.',':'), 104), 
		  u8_sysdate = convert(datetime,u8_sysdate, 104),
		  u8_docs, u8_kind, 
		  u9_date = convert(datetime,u9_date, 104), 
		  u9_time = convert(datetime, REPLACE(u9_time,'.',':'), 104), 
		  u9_sysdate = convert(datetime,u9_sysdate, 104),
		  u9_docs, u2_kind, 
		  u10_date = convert(datetime,u10_date, 104), 
		  u10_time = convert(datetime, REPLACE(u10_time,'.',':'), 104), 
		  u10_sysdate = convert(datetime,u10_sysdate, 104),
		  u10_docs, u2_kind, 
		  version, @file_name
FROM 
	 OPENXML (@docHandle, '/user_info//updates', 2)
         WITH      (	usr_file_date datetime '//USR_FILE/@date',
			usr_file_time datetime '//USR_FILE/@time',
			usr_file_kind varchar (50) '//USR_FILE/@kind',
			info_cod_date datetime '//info.cod/@date',
			info_cod_time datetime '//info.cod/@time',
			consult_tor_date datetime '//consult.tor/@date',
			consult_tor_time datetime '//consult.tor/@time',

			netCount int '/user_info/package//@netCount',
			system int '@netCount',

			vDistr varchar (50) '..//@directory',
			nDistr varchar (50) '..//@nDistr',
			nComp int '..//@nComp',
			directory varchar (50) '..//@directory',
			nCat int '..//@nCat',
			nTexts int '..//@nTexts',
			n3 int '..//@n3',					
			n4 int '..//@n4',		
			n5 int '..//@n5',		
			n6 int '..//@n6',
			compliance varchar (50) '..//@compliance',		
			u1_date datetime './/u1/@date', 
			u1_time datetime './/u1/@time', 
			u1_sysdate datetime './/u1/@sysdate', 
			u1_docs int './/u1/@docs', 
			u1_kind varchar (10) './/u1/@kind',
			u2_date datetime './/u2/@date', 
			u2_time datetime './/u2/@time', 
			u2_sysdate datetime'.//u2/@sysdate', 
			u2_docs int './/u2/@docs', 
			u2_kind varchar (10)'.//u2/@kind',
			u3_date datetime './/u3/@date', 
			u3_time datetime './/u3/@time', 
			u3_sysdate datetime './/u3/@sysdate', 
			u3_docs int'.//u3/@docs', 
			u3_kind varchar (10)'.//u3/@kind',
			u4_date datetime './/u4/@date', 
			u4_time datetime './/u4/@time', 
			u4_sysdate datetime './/u4/@sysdate', 
			u4_docs int'.//u4/@docs', 
			u4_kind varchar (10)'.//u4/@kind',
			u5_date datetime './/u5/@date', 
			u5_time datetime './/u5/@time', 
			u5_sysdate datetime './/u5/@sysdate', 
			u5_docs int'.//u5/@docs', 
			u5_kind varchar (10)'.//u5/@kind',
			u6_date datetime './/u6/@date', 
			u6_time datetime './/u6/@time', 
			u6_sysdate datetime './/u6/@sysdate', 
			u6_docs int'.//u6/@docs', 
			u6_kind varchar (10)'.//u6/@kind',	
			u7_date datetime './/u7/@date', 
			u7_time datetime './/u7/@time', 
			u7_sysdate datetime './/u7/@sysdate', 
			u7_docs int'.//u7/@docs', 
			u7_kind varchar (10)'.//u7/@kind',
			u8_date datetime './/u8/@date', 
			u8_time datetime './/u8/@time', 
			u8_sysdate datetime './/u8/@sysdate', 
			u8_docs int'.//u8/@docs', 
			u8_kind varchar (10)'.//u8/@kind',	
			u9_date datetime './/u9/@date', 
			u9_time datetime './/u9/@time', 
			u9_sysdate datetime './/u9/@sysdate', 
			u9_docs int './/u9/@docs', 
			u9_kind varchar (10) './/u9/@kind',
			u10_date datetime './/u10/@date', 
			u10_time datetime './/u10/@time', 
			u10_sysdate datetime './/u10/@sysdate', 
			u10_docs int'.//u10/@docs', 
			u10_kind varchar (10)'.//u10/@kind',
			version varchar (50)'/user_info/res_version')


вываливается ошибка: Ошибка преобразования datetime из символьной строки.
18 май 11, 15:23    [10672047]     Ответить | Цитировать Сообщить модератору
 Re: преобразовывать вставляемые данные в datetime в процедуре OpenXML  [new]
Glory
Member

Откуда:
Сообщений: 104751
Почему здесь - WITH ( usr_file_date datetime '//USR_FILE/@date', - остался тип datetime то ?
18 май 11, 15:27    [10672089]     Ответить | Цитировать Сообщить модератору
 Re: преобразовывать вставляемые данные в datetime в процедуре OpenXML  [new]
Bulat2
Member

Откуда:
Сообщений: 57
Glory,

переделал.. поставил тип varchar всё равно та же ошибка ((
19 май 11, 14:20    [10678277]     Ответить | Цитировать Сообщить модератору
 Re: преобразовывать вставляемые данные в datetime в процедуре OpenXML  [new]
Bulat2
Member

Откуда:
Сообщений: 57
вставляет несколько строк а потом ошибка
19 май 11, 14:22    [10678294]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить