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

Откуда:
Сообщений: 91
MSSQL 2016. Задание загружает access файлы через Linked server. По одному файлу все хорошо.
Кидаю 27 файлов (общим объемом гиг) загружает половину, потом пишет:
Не удалось проинициализировать объект источника данных поставщика OLE DB "Microsoft.ACE.OLEDB.16.0" для связанного сервера "AccessSource". [SQLSTATE 42000] (Ошибка 7303)  Поставщик OLE DB "Microsoft.ACE.OLEDB.16.0" для связанного сервера "AccessSource" вернул сообщение "Неопознанная ошибка". [SQLSTATE 01000] (Ошибка 7412).  Шаг завершился с ошибкой.

И после этого больше ничего не грузит, приходится перезагружать компьютер. Как избавиться от этой ошибки?
3 фев 17, 18:51    [20178797]     Ответить | Цитировать Сообщить модератору
 Re: При больших нагрузках умирает Microsoft.ACE.OLEDB.16.0  [new]
WarAnt
Member

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

автор
Как избавиться от этой ошибки?

автор
По одному файлу все хорошо.
3 фев 17, 19:11    [20178866]     Ответить | Цитировать Сообщить модератору
 Re: При больших нагрузках умирает Microsoft.ACE.OLEDB.16.0  [new]
TimonSX
Member

Откуда:
Сообщений: 91
Но задача то не разово загрузить.... Тем более после каждого файла я дропую линкед сервер.
3 фев 17, 20:04    [20178996]     Ответить | Цитировать Сообщить модератору
 Re: При больших нагрузках умирает Microsoft.ACE.OLEDB.16.0  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31429
TimonSX
Но задача то не разово загрузить.... Тем более после каждого файла я дропую линкед сервер.
Подробностей вообще нет.
Что тут можно сказать, на сообщение "ошибка"?
3 фев 17, 20:46    [20179058]     Ответить | Цитировать Сообщить модератору
 Re: При больших нагрузках умирает Microsoft.ACE.OLEDB.16.0  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
TimonSX
И после этого больше ничего не грузит

TimonSX
По одному файлу все хорошо.

Так грузит или нет?

И вы уже пробовали загрузить все 27 файлов "по одному файлу" и убедились что все работает?
3 фев 17, 23:45    [20179609]     Ответить | Цитировать Сообщить модератору
 Re: При больших нагрузках умирает Microsoft.ACE.OLEDB.16.0  [new]
TimonSX
Member

Откуда:
Сообщений: 91
По одному файлу, даже по 5 грузиться, да и все каждый пятый раз грузятся, но 4 раза из 5 загрузка умирает и помогает только перезагрузка сервера. Причем если дохнет "Microsoft.ACE.OLEDB.16.0" то и "Microsoft.ACE.OLEDB.12.0" тоже дохнет.
А если я все-таки перейду на SSIS это поможет ведь тоже буду тот же драйвер использовать?

PS Вот так все загружается:
+

IF OBJECT_ID('tempdb..#TEMPACCESSAUDI')IS NOT NULL
      DROP TABLE #TEMPACCESSAUDI;


BEGIN TRY 
	exec sp_dropserver 'AccessSourceAUDI'
END TRY
BEGIN CATCH
--
END CATCH
go
DECLARE @BrandId nvarchar(50)
DECLARE @CountAUDI int
DECLARE @FullPatchAUDI nvarchar(255)
DECLARE @PercentAUDI nvarchar(255)
DECLARE @NamePriceAUDI nvarchar(Max)
DECLARE @NameTEILEAUDI nvarchar(Max)
DECLARE @TemporyTableNamePriceAUDI TABLE ([Retail_Cost] Numeric(18,2), Purchase_Cost Numeric(18,2), CatName nvarchar(50))
DECLARE @PerAUDI Numeric(2,1)
DECLARE @tabTempAUDI table (TABLE_CAT varchar(55),TABLE_SCHEM varchar(55),TABLE_NAME varchar(55),TABLE_TYPE varchar(55),REMARKS varchar(55))
DECLARE @TabAUDI TABLE(SubDirectory nvarchar(255),Depth smallint, ParentDirectory int); 
CREATE TABLE #TEMPACCESSAUDI([CatName] nvarchar(50),[NameRus] nvarchar(MAX),[NameEng] nvarchar(MAX), [Groupe_1] nvarchar(50),[Groupe_2] nvarchar(50),[Groupe_3] nvarchar(50),[Groupe_4] nvarchar(50),[Groupe_5] nvarchar(50),[Groupe_6] nvarchar(50), [Retail_Cost] Numeric(18,2), [Purchase_Cost] Numeric(18,2),Stock nvarchar(50))
DECLARE @AddGroup TABLE(Groupe345 nvarchar(50),Groupe6 nvarchar(50))
DECLARE @ExcTable table(Brand nvarchar(50),IdBrand nvarchar(50),GroupeEx nvarchar(50),Rate Numeric(18,2))
-------------------------------
----Группы эксклюзивности (обратные)
Insert into @ExcTable
select	'AUDI','289753bb-7ea4-11e4-9abf-a0d3c1197a54',	'93',	1.05	union all
select	'VW'  ,'552b79db-5279-48e9-b48f-bb5e2066146c',	'94',	1.05	union all
select	'SKODA','e9c314c4-b571-11e3-9fe6-2c768a56b664',	'10',	1.05	union all	
select	'SKODA','e9c314c4-b571-11e3-9fe6-2c768a56b664',	'95',	1.05		


----Группы возмещения
Insert into @AddGroup
select	'CCA',	'1. Детали группы ТО'	union all
select	'NZZ',	'3. Детали ремонтной группы'	union all
select	'EEB',	'4. Детали кузовные и остальные'	union all
select	'KCF',	'4. Детали кузовные и остальные'	union all
select	'XTZ',	'4. Детали кузовные и остальные'	

----------------------------------
INSERT INTO @TabAUDI(SubDirectory)  EXECUTE xp_cmdshell   "dir /b  C:\_VenodorsDownLoad\"                             
delete from @TabAUDI where SubDirectory is null
Update @TabAUDI set
Depth =1,
ParentDirectory = case when Charindex('.',SubDirectory) > 0 then 1 else 0 end

Delete from @TabAUDI where ParentDirectory = 0 or (not (SubDirectory like '%.mdb' or SubDirectory like '%.accdb'))

Update @TabAUDI
Set SubDirectory = 'C:\_VenodorsDownLoad\' + SubDirectory

FROM @TabAUDI where (SubDirectory like '%.mdb' or SubDirectory like '%.accdb') and (SubDirectory like 'VW%' or SubDirectory like 'AUDI%' or SubDirectory like 'SKODA%')
---Все обьявил и получил все пути файлов в @TabAUDI

WHILE (SELECT count(SubDirectory) from @TabAUDI) > 0
BEGIN
SELECT top 1 @FullPatchAUDI = SubDirectory
,@BrandId = CASE 
When SubDirectory like '%VW%'    then '552b79db-5279-48e9-b48f-bb5e2066146c' 
When SubDirectory like '%AUDI%'  then '289753bb-7ea4-11e4-9abf-a0d3c1197a54' 
When SubDirectory like '%SKODA%' then 'e9c314c4-b571-11e3-9fe6-2c768a56b664' 
END  from @TabAUDI
DELETE FROM @TabAUDI WHERE [SubDirectory]=@FullPatchAUDI

/*Вот тут уже начинается сама загрузка*/
DELETE FROM #TEMPACCESSAUDI
DELETE FROM @TemporyTableNamePriceAUDI
DELETE FROM @tabTempAUDI
Delete from @ExcTable where IdBrand <> @BrandId

exec sp_addlinkedserver
@server = 'AccessSourceAUDI',
@provider = N'Microsoft.ACE.OLEDB.16.0', 
@srvproduct = N'OLE DB Provider for ACE',
@datasrc = @FullPatchAUDI;

---Получаем имена таблице
Insert into @tabTempAUDI
exec sp_tables_ex @table_server = 'AccessSourceAUDI',
@table_type = 'Table'

select top 1
@NamePriceAUDI = a.TABLE_NAME 
from @tabTempAUDI  a 
Where a.TABLE_NAME like 'PREISLIST%'

select top 1
@NameTEILEAUDI = a.TABLE_NAME 
from @tabTempAUDI  a 
Where a.TABLE_NAME like 'TEILE%'

----Заполняем временные таблички и вставляем в них данные
Set @NameTEILEAUDI = N'Select distinct a.AX_TNR CatName, a.AX_TEXT2 NameRus, a.AX_TEXT1 NameEng, a.AN_RAGR Groupe_1, a.AX_FAHRZ_HER Groupe_2, a.AX_REP_1 Groupe_3, a.AX_REP_2 Groupe_4, a.AX_REP_3 Groupe_5 from [AccessSourceAUDI]...['+@NameTEILEAUDI+'] a'
Set @NamePriceAUDI = N'Select distinct a.UPE Retail_Cost, a.HEP Purchase_Cost, a.CODE CatName  from [AccessSourceAUDI]...['+@NamePriceAUDI+'] a'

Insert into #TEMPACCESSAUDI([CatName],[NameRus],[NameEng], [Groupe_1],[Groupe_2],[Groupe_3],[Groupe_4],[Groupe_5])
exec sp_executesql @NameTEILEAUDI

INSERT INTO @TemporyTableNamePriceAUDI 
exec sp_executesql @NamePriceAUDI

exec sp_dropserver 'AccessSourceAUDI'
--------------Коэфициенты и группы
Update #TEMPACCESSAUDI set
Groupe_6 = a.Groupe6
from @AddGroup as a where Groupe_3 + Groupe_4 + Groupe_5 = a.Groupe345

Update #TEMPACCESSAUDI set
Retail_Cost =  ISNULL(ex.Rate,1) *  ISNULL(a.Retail_Cost,0)
,Purchase_Cost= ISNULL(ex.Rate,1) *  ISNULL(a.Purchase_Cost,0)
,Groupe_6 = Case when ex.Rate is null then Groupe_6 else 'Эксклюзивные запчасти других брендов' end
from #TEMPACCESSAUDI left Join @TemporyTableNamePriceAUDI a
on #TEMPACCESSAUDI.CatName = a.CatName
left join @ExcTable as ex on #TEMPACCESSAUDI.Groupe_2 = ex.GroupeEx

/*

Update #TEMPACCESSAUDI set
Purchase_Cost = 0 
where Purchase_Cost is null 

Update #TEMPACCESSAUDI set
Retail_Cost = 0 
where Retail_Cost is null 
*/
Update #TEMPACCESSAUDI set
Groupe_6 = 'Другое'
where Groupe_6 is null or Groupe_5 is null 
--------------Коэфициенты и группы

----Загружаем группы
Insert into [dbo].[PriceGroup] (GroupDescription)
Select distinct 
a.Groupe_1 as Groupe
from #TEMPACCESSAUDI as a
Left join [dbo].[PriceGroup] as PriceGroup on (a.Groupe_1 = PriceGroup.GroupDescription)
where PriceGroup._IDPriceGroup is null and a.Groupe_1 is not null
Union all
Select distinct 
a.Groupe_2 as Groupe
from #TEMPACCESSAUDI as a
Left join [dbo].[PriceGroup] as PriceGroup on (a.Groupe_2 = PriceGroup.GroupDescription)
where PriceGroup._IDPriceGroup is null and a.Groupe_2 is not null
Union all
Select distinct 
a.Groupe_3 as Groupe
from #TEMPACCESSAUDI as a
Left join [dbo].[PriceGroup] as PriceGroup on (a.Groupe_3 = PriceGroup.GroupDescription)
where PriceGroup._IDPriceGroup is null and a.Groupe_3 is not null
Union all
Select distinct 
a.Groupe_4 as Groupe
from #TEMPACCESSAUDI as a
Left join [dbo].[PriceGroup] as PriceGroup on (a.Groupe_4 = PriceGroup.GroupDescription)
where PriceGroup._IDPriceGroup is null and a.Groupe_4 is not null
Union all
Select distinct 
a.Groupe_5 as Groupe
from #TEMPACCESSAUDI as a
Left join [dbo].[PriceGroup] as PriceGroup on (a.Groupe_5 = PriceGroup.GroupDescription)
where PriceGroup._IDPriceGroup is null and a.Groupe_5 is not null
Union all
Select distinct 
a.Groupe_6 as Groupe
from #TEMPACCESSAUDI as a
Left join [dbo].[PriceGroup] as PriceGroup on (a.Groupe_6 = PriceGroup.GroupDescription)
where PriceGroup._IDPriceGroup is null and a.Groupe_6 is not null


---- Обновляем значение во временной базе
Update #TEMPACCESSAUDI SET
Groupe_1 = Price_1._IDPriceGroup, Groupe_2 = Price_2._IDPriceGroup, Groupe_3 = Price_3._IDPriceGroup, Groupe_4 = Price_4._IDPriceGroup,Groupe_5 = Price_5._IDPriceGroup,Groupe_6 = Price_6._IDPriceGroup
from #TEMPACCESSAUDI left Join [dbo].[PriceGroup] as Price_1
on #TEMPACCESSAUDI.Groupe_1 = Price_1.GroupDescription
left Join [dbo].[PriceGroup] as Price_2
on #TEMPACCESSAUDI.Groupe_2 = Price_2.GroupDescription
left Join [dbo].[PriceGroup] as Price_3
on #TEMPACCESSAUDI.Groupe_3 = Price_3.GroupDescription
left Join [dbo].[PriceGroup] as Price_4
on #TEMPACCESSAUDI.Groupe_4 = Price_4.GroupDescription
left Join [dbo].[PriceGroup] as Price_5
on #TEMPACCESSAUDI.Groupe_5 = Price_5.GroupDescription
left Join [dbo].[PriceGroup] as Price_6
on #TEMPACCESSAUDI.Groupe_6 = Price_6.GroupDescription
-----Закончили обновлять

MERGE [Holding_Exchange].[dbo].[Price] as Price USING #TEMPACCESSAUDI as TEMP ON Price.catname = TEMP.catName and Price._IDBrand = @BrandId 
when MATCHED
THEN UPDATE SET
Price.Retail_Cost = TEMP.Retail_Cost,
Price.Retai_VAT = TEMP.Retail_Cost*0.18,
Price.Retai_CostVAT = TEMP.Retail_Cost*1.18,
Price.Purchase_Cost = TEMP.Purchase_Cost,
Price.Purchase_VAT = TEMP.Purchase_Cost*0.18,
Price.Purchase_CostVAT = TEMP.Purchase_Cost*1.18,
Price.Wholesale_Cost = TEMP.Purchase_Cost,
Price.Wholesale_VAT = TEMP.Purchase_Cost*0.18,
Price.Wholesale_CostVAT = TEMP.Purchase_Cost*1.18,
Price.Groupe_1 = TEMP.Groupe_1,
Price.Groupe_2 = TEMP.Groupe_2,
Price.Groupe_3 = TEMP.Groupe_3,
Price.Groupe_4 = TEMP.Groupe_4,
Price.Groupe_5 = TEMP.Groupe_5,
Price.Groupe_6 = TEMP.Groupe_6,
Price.DateLoad = getdate()
when not MATCHED THEN 
INSERT ([CatName],[NameRus],[NameEng],[Groupe_1],[Groupe_2],[Groupe_3],[Groupe_4],[Groupe_5],[Groupe_6],[Retail_Cost],[Retai_VAT],[Retai_CostVAT],[Purchase_Cost],[Purchase_VAT],[Purchase_CostVAT],[_IDBrand],[DateLoad],[Wholesale_Cost],[Wholesale_VAT],[Wholesale_CostVAT]) 
values(TEMP.CatName,TEMP.NameRus,TEMP.NameEng, TEMP.Groupe_1,TEMP.Groupe_2,TEMP.Groupe_3,TEMP.Groupe_4,TEMP.Groupe_5,TEMP.Groupe_6,TEMP.Retail_Cost,TEMP.Retail_Cost*0.18,TEMP.Retail_Cost*1.18,TEMP.Purchase_Cost,TEMP.Purchase_Cost*0.18,TEMP.Purchase_Cost*1.18,@BrandId,getdate(),TEMP.Purchase_Cost,TEMP.Purchase_Cost*0.18,TEMP.Purchase_Cost*1.18);

Set @FullPatchAUDI = 'Del "'+@FullPatchAUDI+'"'

EXEC master..xp_cmdshell @FullPatchAUDI
Revert
end
go

IF OBJECT_ID('tempdb..#TEMPACCESSAUDI')IS NOT NULL
      DROP TABLE #TEMPACCESSAUDI;
go

4 фев 17, 09:05    [20179911]     Ответить | Цитировать Сообщить модератору
 Re: При больших нагрузках умирает Microsoft.ACE.OLEDB.16.0  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31429
TimonSX
По одному файлу, даже по 5 грузиться, да и все каждый пятый раз грузятся, но 4 раза из 5 загрузка умирает
Код ниже - это что, загрузка одного файла, которая никогда не ломается?
И если её запускать хоть 1000 раз, то всё работает?
А падает какой то другой код?

Ничего непонятно из вашего объяснения.

Дохнет "Microsoft.ACE.OLEDB.16.0" - это что означает?
4 фев 17, 10:33    [20179976]     Ответить | Цитировать Сообщить модератору
 Re: При больших нагрузках умирает Microsoft.ACE.OLEDB.16.0  [new]
TimonSX
Member

Откуда:
Сообщений: 91
Ну не знаю как еще объяснить то... Вот код, который загружает файлы.
На (примерно 10 файле) он дохне с ошибкой из первого поста. место:
вот тут:
Insert into #TEMPACCESSAUDI([CatName],[NameRus],[NameEng], [Groupe_1],[Groupe_2],[Groupe_3],[Groupe_4],[Groupe_5])
exec sp_executesql @NameTEILEAUDI

INSERT INTO @TemporyTableNamePriceAUDI 
exec sp_executesql @NamePriceAUDI

То на первом запросе то на втором.
Я уже не знаю как подробней все это описать. Явно проблема в Ole DB но как её решить не знаю.
4 фев 17, 11:59    [20180107]     Ответить | Цитировать Сообщить модератору
 Re: При больших нагрузках умирает Microsoft.ACE.OLEDB.16.0  [new]
aleks2
Guest
alexeyvg
TimonSX
По одному файлу, даже по 5 грузиться, да и все каждый пятый раз грузятся, но 4 раза из 5 загрузка умирает
Код ниже - это что, загрузка одного файла, которая никогда не ломается?
И если её запускать хоть 1000 раз, то всё работает?
А падает какой то другой код?

Ничего непонятно из вашего объяснения.

Дохнет "Microsoft.ACE.OLEDB.16.0" - это что означает?


Мой хрустальный шар кажет: тредстатер отгребает ошибку при попытке обратиться к LinkedServer.

КО сообщает: не царскоесерверное это дело - файлы access-а грузить.

КО рекомендует: грузить файлы по-человечески, т.е. клиентом. Powershell справится.
4 фев 17, 12:03    [20180113]     Ответить | Цитировать Сообщить модератору
 Re: При больших нагрузках умирает Microsoft.ACE.OLEDB.16.0  [new]
TimonSX
Member

Откуда:
Сообщений: 91
aleks2
КО рекомендует: грузить файлы по-человечески, т.е. клиентом. Powershell справится.

Клиент powershell это как? чтото вроде "New-Object System.Data.SqlClient.SqlConnection()" и запуск скрипта? так разве это не одно и тоже. Все равно ж сервере запускается.
4 фев 17, 16:06    [20180564]     Ответить | Цитировать Сообщить модератору
 Re: При больших нагрузках умирает Microsoft.ACE.OLEDB.16.0  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31429
TimonSX
На (примерно 10 файле) он дохне с ошибкой из первого поста. место:
вот тут:
Да, но вы писали:
TimonSX
По одному файлу, даже по 5 грузиться

То есть если грузить 1000 файлов "по одному файлу", вызвав этот код 1000 раз, то всё нормально, да?

Если нет, то что вы имели в виду под "по одному файлу"?

Или по одному файлу тоже не грузится, линкед зависает через несколько вызовов?
Допустим, если этот код поставить в джоб, он будет импортить по одному файлу в час, а через пару суток зависнет, да?
TimonSX
Кидаю 27 файлов
Куда вы их кидаете?

Вы этот вышеприведённый код выполняете в цикле, т.е. есть ещё какой то код? Или в 25 разных джобах?
Или вы 27 файлов импортируете ещё каким то другим кодом?

TimonSX
Клиент powershell это как? чтото вроде "New-Object System.Data.SqlClient.SqlConnection()" и запуск скрипта? так разве это не одно и тоже. Все равно ж сервере запускается.
Нет, имеется в виду, что не использовать линкед-сервер, и загрузку сиквелом, а написать клиент для импорта, на каком то языке программирования.
Например, используя powershell, или SSIS, или, может, какой то C#
4 фев 17, 17:51    [20180703]     Ответить | Цитировать Сообщить модератору
 Re: При больших нагрузках умирает Microsoft.ACE.OLEDB.16.0  [new]
TimonSX
Member

Откуда:
Сообщений: 91
Этот код смотрит на папку и все файлы в этой папке грузит по очереди. Если туда сразу кинуть много файлов, то в процессе загрузки появляется ошибка. А если кидать примерно по 5 файлов каждый час то все нормально. В рабочем варианте это вся система живет 1-2 недели, пока пользователи разом не закинут много файлов и тогда все и ломается.
PS это и есть job запускается по расписанию каждые 20 минут.
4 фев 17, 19:01    [20180794]     Ответить | Цитировать Сообщить модератору
 Re: При больших нагрузках умирает Microsoft.ACE.OLEDB.16.0  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31429
TimonSX
Этот код смотрит на папку и все файлы в этой папке грузит по очереди.
А, извините, сразу не увидел WHILE, хотя и искал...

А вы делаете попытку переимпортировать этот файл? Во второй раз он импортируется?

Может, это файл кривой?
Или к нему нет доступа?
Или он в это время ещё пишется, или его кто то блокирует?

Как там файлы появляются, в папке, у вас придумана схема, что бы файл не мог импортиться, если, например, его копирование в папку ещё не закончилось?

Можно, например, завернуть в try-catch exec sp_addlinkedserver и exec sp_tables_ex, и если ошибка, обрабатывать другие файлы
А этот обработается в следующий раз.
Ну и конечно сделать какое то управление, что бы если файл не обработался за 2 запуска джоба, то тогда уже слать письма с ошибкой и т.д.
4 фев 17, 20:11    [20180840]     Ответить | Цитировать Сообщить модератору
 Re: При больших нагрузках умирает Microsoft.ACE.OLEDB.16.0  [new]
TimonSX
Member

Откуда:
Сообщений: 91
В целях эксперимента взял один файл скопировал его 20 раз и кинул. В итоге на 12 файле появилась ошибка, продолжить загрузку получилось после перезагрузки сервера.
5 фев 17, 09:05    [20181281]     Ответить | Цитировать Сообщить модератору
 Re: При больших нагрузках умирает Microsoft.ACE.OLEDB.16.0  [new]
aleks2
Guest
У тя, страдалец, два пути:

1. Героический. Разобраться с тонкостями работы Linked Server-а. Провайдер Linked Server-а может работать "in process" и "изолированно".
В первом случае - любой глюк при загрузке убивает сервер. Сервер не может понять, что оно повисло.
Можешь попробовать найти шнягу-переключатель.

2. Правильный. Сваять таки клиента. Ежели у тя СТРОГО файлы Access - то лучшим клиентом является сам MS Access. Там копирование производится тупым INSERT SELECT. Почти как в самом MS SQL. При зависании клиента - процесс можно убить и запустить снова.
5 фев 17, 12:21    [20181419]     Ответить | Цитировать Сообщить модератору
 Re: При больших нагрузках умирает Microsoft.ACE.OLEDB.16.0  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31429
aleks2
2. Правильный. Сваять таки клиента. Ежели у тя СТРОГО файлы Access - то лучшим клиентом является сам MS Access. Там копирование производится тупым INSERT SELECT. Почти как в самом MS SQL. При зависании клиента - процесс можно убить и запустить снова.
Или на SSIS
5 фев 17, 12:50    [20181439]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить