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

Откуда:
Сообщений: 204
при апдейте таблицы из под процедуры данные не появляются в таблице path. Пробовал ставить commit transaction не помогло. А если считать данные из таблицы path , то считывает данные правильно. В чем может быть причина? Текст процедуры привожу.
+
CREATE PROCEDURE [oss].[P_excel_clients]
@report int,
@city_id int,
@date_start datetime,
@date_end datetime
AS
BEGIN
declare @outscript varchar(max),
@outfile varbinary(max),
@sql varchar(max),
@server varchar(100),
@password varchar(20),
@path varchar(100),
@path_dir varchar(100),
@path_file varchar(100),
@t varchar(100);

set @path_dir = 'D:\Eprasys\VBEKENEV\Reports\';
set @path_file = 'Report4';
SET @path = @path_dir + @path_file + '_' + cast (CONVERT (date, SYSDATETIME()) as varchar(100)) + '.xlsx';

if ISNULL(cast(cast(@date_start as DATE) as varchar(10)),'1990-01-01')<> '1990-01-01'
begin
set @sql='OLEDBConnection.CommandText = "select city as ''Наименование города'', street_type as ''Тип улицы'', street as ''Наименование улицы'', building as ''Адрес'', flat_count as ''Количество квартир'', sector as ''Сектор'', date_exploitation as ''Дата ввода в эксплуатацию'', kol_tkd as ''Количество ТКД в доме'', kol1_tkd as ''Количество коммутаторов «подключено»'', kol2_tkd as ''Количество коммутаторов «Временно не подключен»'', cl_all as ''Количество абонентов (всего)'', cl_open as ''Статус абонента «Ореn»'', cl_suspend as ''Статус абонента «Suspend»'', cl_cancel as ''Статус абонента «Cancel»'',comment_penetr as ''Примечание к пенетрации'', ksk as ''КСК (основной)'', ksk1 as ''КСК'', comment as ''Комментарий (из категории «адреса»)'' from oss.f_v_report_client_date('''+cast(cast(@date_start as DATE) as varchar(10))+''','''+cast(cast(@date_end as DATE) as varchar(10))+''') ';

if ISNULL(@city_id,0)>0
set @sql=@sql+' where city_id='+CAST(@city_id as varchar(3));
end
else
begin
set @sql='OLEDBConnection.CommandText = "select city as ''Наименование города'', street_type as ''Тип улицы'', street as ''Наименование улицы'', building as ''Адрес'', flat_count as ''Количество квартир'', sector as ''Сектор'', date_exploitation as ''Дата ввода в эксплуатацию'', kol_tkd as ''Количество ТКД в доме'', kol1_tkd as ''Количество коммутаторов «подключено»'', kol2_tkd as ''Количество коммутаторов «Временно не подключен»'', cl_all as ''Количество абонентов (всего)'', cl_open as ''Статус абонента «Ореn»'', cl_suspend as ''Статус абонента «Suspend»'', cl_cancel as ''Статус абонента «Cancel»'',comment_penetr as ''Примечание к пенетрации'', ksk as ''КСК (основной)'', ksk1 as ''КСК'', comment as ''Комментарий (из категории «адреса»)'' from oss.f_v_report_client()';
if ISNULL(@city_id,0)>0
set @sql=@sql+' where city_id='+CAST(@city_id as varchar(3));
end
set @sql=@sql+' order by 2,3,4,5 "'

select @server =@@servername;
if @server = 'AL-FTB005' set @password = 'gis_Ep131' ;
-- set @outscript = ' connectionString = "Driver=Sql Server;Server=' + cast( @@servername as varchar( 128 ) ) + '; Database=kartel; User ID=oss;Password='+ @password + '"
set @outscript = '

rem
dim WorkbookConnection
dim WorkbookConnectionOp
dim QueryTableb
dim OLEDBConnection
dim connstr
dim cmdText
dim OLEDBConnectionPr
dim Worksheet
dim rDest
dim objBook
dim ListObj
dim ListOb
dim wsSheet
dim rnStart
dim SelChange
dim SelChangeCor
dim SelChangeCorN
dim selection

rem
connstr = "OLEDB;Provider=SQLOLEDB.1;Password=ReporT;Persist Security Info=True;User ID=report;Initial Catalog=kartel;Data Source=AL-FTB005;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=ATITOCHKA;Use Encryption for Data=False;Tag with column collation when possible=False"
cmdText = ""

set objBook = objXLApp.Workbooks(1)
set mainSheet = objBook.Sheets(1)
set wsSheet = objBook.Worksheets(1)
set WorkbookConnection=objBook.Connections("kartel")
set OLEDBConnection = WorkbookConnection.OLEDBConnection
OLEDBConnection.CommandText = ""
set ListObj = wsSheet.ListObjects(1)
set QueryTableb = ListObj.QueryTable
QueryTableb.PreserveColumnInfo = "False"
QueryTableb.PreserveFormatting = "False"
OLEDBConnection.Refresh
objBook.Connections("kartel").Delete
wsSheet.Columns("G:G").NumberFormat = "dd.mm.yyyy"
objBook.Application.DisplayAlerts = False
objBook.SaveAs "Filename"
objBook.Application.DisplayAlerts = True
'
set @outscript = REPLACE( @outscript, 'OLEDBConnection.CommandText = ""', @sql);
set @outscript = REPLACE( @outscript, 'Filename', @path);
begin transaction
update oss.path set path = @path where id = 1;
commit transaction
-- select @t=path from oss.path where id =1;
set @outfile = oss.f_report( @report );
select @outscript outscript, @outfile outfile;

return;

END;
1 апр 15, 11:01    [17458007]     Ответить | Цитировать Сообщить модератору
 Re: апдейт таблицы  [new]
Glory
Member

Откуда:
Сообщений: 104751
relav
Текст процедуры привожу.

Испрользуйте дебагинг и отладочные выводы, чтобы понять, что вы получаете в своих перемных
1 апр 15, 11:06    [17458036]     Ответить | Цитировать Сообщить модератору
 Re: апдейт таблицы  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 9184
То, что написано в этом коде к SQL, в общем-то, не имеет прямого отношения.
Очевидно, что чудес не бывает и ошибка в Ваших алгоритмах.
1 апр 15, 12:51    [17458830]     Ответить | Цитировать Сообщить модератору
 Re: апдейт таблицы  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1926
relav,

на момент UPDATE в вашей таблице oss.path отсутствует строка с id = 1 или же на ней висит тригер откатывающий транзакцию по какой либо причине несоответствия данных в таблице

других явных причин из вашего кода я не вижу
1 апр 15, 13:07    [17458963]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить