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

Откуда:
Сообщений: 131
CREATE TRIGGER [_IUD_V8] ON [dbo].[_Tabla3601] FOR DELETE,INSERT
AS
begin
if app_name()='1CV81 Server'
begin
set nocount on
Insert into Table(_tid,_table,_column,_LineNo,_type,_length,_xml,_action,_row)
Select * from (
SELECT cast(cast(cast(getdate() as datetime) as varbinary) as bigint)_tid ,'_InfoReg3601' _table,null _column,null _LineNo,null _type,null _length,
(Select _Fld3602, _Fld3603, _Fld3604, _Fld3605, _Fld3606, _Fld3607, _Fld3608, _Fld3609, _Fld3610, _Fld3611, _Fld3612, _SimpleKey from DELETED asc for xml raw, root, binary base64) _xml,
'd' _action,
NEWID() _row) t where _xml is not null

Insert into PIT_Updates (_tid,_table,_column,_LineNo,_type,_length,_xml,_action,_row)
Select * from (
SELECT cast(cast(cast(getdate() as datetime) as varbinary) as bigint)+1 _tid ,'_InfoReg3601' _table,null _column,null _LineNo,null _type,null _length,
(Select _Fld3602, _Fld3603, _Fld3604, _Fld3605, _Fld3606, _Fld3607, _Fld3608, _Fld3609, _Fld3610, _Fld3611, _Fld3612, _SimpleKey from INSERTED for xml raw, root, binary base64) _xml,
'i' _action,
NEWID() _row) t where _xml is not null
end
end


В части DELETED , не вся таблица выгружается. Пакет рверся приблизительно на 9000 строк
Хотя если выполнить скрипт просто к таблице - все нормально.

Есть ли ограничение в триггере и можно ли как то его обойти?
22 июн 09, 16:45    [7329662]     Ответить | Цитировать Сообщить модератору
 Re: Ограничение триггера  [new]
Alexes
Member

Откуда:
Сообщений: 1100
Может просто не помещается в _xml?
22 июн 09, 16:53    [7329721]     Ответить | Цитировать Сообщить модератору
 Re: Ограничение триггера  [new]
god44
Member

Откуда:
Сообщений: 131
Так там вроде 2 гига
22 июн 09, 16:56    [7329740]     Ответить | Цитировать Сообщить модератору
 Re: Ограничение триггера  [new]
god44
Member

Откуда:
Сообщений: 131
Проверил действительно
Так работает
Select * from _InfoReg3601(nolock)
for xml auto , root , binary base64

Так в тип данных не поместился
Declare @xml xml
set @xml = (
Select * from _InfoReg3601(nolock)
for xml auto , root , binary base64)
select @xml
22 июн 09, 17:05    [7329799]     Ответить | Цитировать Сообщить модератору
 Re: Ограничение триггера  [new]
god44
Member

Откуда:
Сообщений: 131
Что можно сделать?
22 июн 09, 17:06    [7329801]     Ответить | Цитировать Сообщить модератору
 Re: Ограничение триггера  [new]
Alexes
Member

Откуда:
Сообщений: 1100
Разбивать набор строк на части, так чтобы каждая часть поместилось в xml.
Как вариант, сохранять бинарные данные в отдельной таблице.
22 июн 09, 17:32    [7329998]     Ответить | Цитировать Сообщить модератору
 Re: Ограничение триггера  [new]
god44
Member

Откуда:
Сообщений: 131
Чем поможет сохранениев отдельной таблице?
22 июн 09, 17:55    [7330133]     Ответить | Цитировать Сообщить модератору
 Re: Ограничение триггера  [new]
Alexes
Member

Откуда:
Сообщений: 1100
Я подразумевал, что для каждой строки исходной таблицы в отдельной таблице будет создаваться строка, содержащая только бинарные данные.
22 июн 09, 18:10    [7330205]     Ответить | Цитировать Сообщить модератору
 Re: Ограничение триггера  [new]
god44
Member

Откуда:
Сообщений: 131
В BOL написано что орнаичение в 64 разрядном sql 2 гига
Но у меня 18 мегов н влезает
23 июн 09, 09:02    [7331328]     Ответить | Цитировать Сообщить модератору
 Re: Ограничение триггера  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381

а как вы, собственно, проверяете, что не все выгружается?

Posted via ActualForum NNTP Server 1.4

23 июн 09, 09:05    [7331334]     Ответить | Цитировать Сообщить модератору
 Re: Ограничение триггера  [new]
god44
Member

Откуда:
Сообщений: 131
declare @xml xml

set @xml = (SELECT *
FROM _InfoReg4162(nolock)
for xml raw, binary base64)

select @xml

Выполнил код

пытаюсь просмотреть xml

К сообщению приложен файл. Размер - 0Kb
23 июн 09, 09:16    [7331357]     Ответить | Цитировать Сообщить модератору
 Re: Ограничение триггера  [new]
god44
Member

Откуда:
Сообщений: 131
declare @xml xml

set @xml = (SELECT *
FROM _InfoReg4162(nolock)
for xml raw, binary base64)
select datalength(@xml)

--результат 17248633


Select Datalength((SELECT *
FROM _InfoReg4162(nolock)
for xml raw, binary base64))

--результат 36408412
23 июн 09, 09:21    [7331373]     Ответить | Цитировать Сообщить модератору
 Re: Ограничение триггера  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381

> пытаюсь просмотреть xml

а что покажет запрос:

select @xml.value('count(/row)', 'int'), datalength(@xml)

по сравнению с select count(*) from _InfoReg4162(nolock)

?

Posted via ActualForum NNTP Server 1.4

23 июн 09, 09:23    [7331376]     Ответить | Цитировать Сообщить модератору
 Re: Ограничение триггера  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381

> declare @xml xml
>
> set @xml = (SELECT *
> FROM _InfoReg4162(nolock)
> for xml raw, binary base64)
> select datalength(@xml)
>
> --результат 17248633
>
>
> Select Datalength((SELECT *
> FROM _InfoReg4162(nolock)
> for xml raw, binary base64))
>
> --результат 36408412

а так?

Select Datalength((SELECT *
FROM _InfoReg4162(nolock)
for xml raw, binary base64, type))

Posted via ActualForum NNTP Server 1.4

23 июн 09, 09:26    [7331390]     Ответить | Цитировать Сообщить модератору
 Re: Ограничение триггера  [new]
god44
Member

Откуда:
Сообщений: 131
daw

> declare @xml xml
>
> set @xml = (SELECT *
> FROM _InfoReg4162(nolock)
> for xml raw, binary base64)
> select datalength(@xml)
>
> --результат 17248633
>
>
> Select Datalength((SELECT *
> FROM _InfoReg4162(nolock)
> for xml raw, binary base64))
>
> --результат 36408412

а так?

Select Datalength((SELECT *
FROM _InfoReg4162(nolock)
for xml raw, binary base64, type))




Так размер один , но все равно таже ошибка
23 июн 09, 09:54    [7331491]     Ответить | Цитировать Сообщить модератору
 Re: Ограничение триггера  [new]
god44
Member

Откуда:
Сообщений: 131
daw

> пытаюсь просмотреть xml

а что покажет запрос:

select @xml.value('count(/row)', 'int'), datalength(@xml)

по сравнению с select count(*) from _InfoReg4162(nolock)

?


count = 76030 в обоих запросах
23 июн 09, 09:55    [7331499]     Ответить | Цитировать Сообщить модератору
 Re: Ограничение триггера  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381

> Так размер один , но все равно таже ошибка

это всего лишь management studio полностью показать ваш xml не может.
количество элементов в полученном xml пробовали подсчитать, как
я показал? с количеством строк в таблице оно совпадает?

Posted via ActualForum NNTP Server 1.4

23 июн 09, 09:57    [7331504]     Ответить | Цитировать Сообщить модератору
 Re: Ограничение триггера  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381

> count = 76030 в обоих запросах

ну, значит, все в порядке - ничего нигде не обрезается.

Posted via ActualForum NNTP Server 1.4

23 июн 09, 09:58    [7331512]     Ответить | Цитировать Сообщить модератору
 Re: Ограничение триггера  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381

> это всего лишь management studio полностью показать ваш xml не может.

можно попробовать в Tools - Options - Query Results - SQL Server - Results to Grid
установить Maximum Characters Retrieved для XML "Unlimited".

Posted via ActualForum NNTP Server 1.4

23 июн 09, 10:02    [7331529]     Ответить | Цитировать Сообщить модератору
 Re: Ограничение триггера  [new]
god44
Member

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

Спасибо
Все понял

declare @hdoc int
exec sp_xml_preparedocument @hdoc out, @xml


select *
from openxml(@hdoc, '/root/row')
with
(_SimpleKey binary(16) '@_SimpleKey'
)

exec sp_xml_removedocument @hdoc

Вернул все мои строки
23 июн 09, 10:16    [7331598]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить