Text
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
CREATE PROCEDURE dbo.NovaUspConvertXML
( @cTRANDATE CHAR(10),
@form_Id VARCHAR(10),
@request_no VARCHAR(30),
@staff_code VARCHAR(10),
@cRETURNCODE CHAR(4) OUTPUT,
@cRETMESSAGE VARCHAR(MAX) OUTPUT
) AS
/*******************************************************************
COMPASS 2000 USER STORED PROCEDURE
NovaUspConvertXML.SQL - Prepare xml for transfer data
PROCESSING DETAILS:
Prepare XML file for
AUTHOR : Sting Wu
DATE : 11/12/2014
PIRNO :
REVISION LOG:
VERSION PIRNO PROGRAMMER REMARK DATE PURPOSE
5.0 NOVA Sting Wu 11/12/2014 Initial Version
********************************************************************/
/*error handling variable section */
BEGIN
begin try
declare @toTable nvarchar(20),@toField nvarchar(20),@lastTable nvarchar(20),@key_field nvarchar(20),
@exeValue nvarchar(MAX),@exeValue2 nvarchar(MAX),@xml nvarchar(max),@outparam nvarchar(100),
@rowNo int,@xml2 nvarchar(max)
declare @sql nvarchar(max)
DECLARE @CompassDB VARCHAR(20)
delete from TNovaFieldMapping_temp where request_no = @request_no;
set @lastTable = ''
set @xml = '<form form_system_id='''+CAST(@form_Id AS VARCHAR)+''' request_no='''+@request_no+'''>'
set @xml2 = ''
set @sql = ''
declare cur_insertTMP cursor for
select N'insert into TNovaFieldMapping_temp
select distinct '''+ to_table +N''' AS to_table,
'''+ to_field +N''' AS to_field,
'''+ isnull(key_field,N'') +N''' AS key_field,' +
(CASE WHEN isnull(Mul_field,'') <> '' THEN isnull(Mul_field,N'')
ELSE N'0' END) + ' AS id,' +
(CASE WHEN isnull(from_table,'') = '' THEN N'value = '''+ from_field+ N''''
WHEN isnull(datetype,N'') = N'datetime' THEN N'value = convert(varchar,'+ from_field + N',121) '
ELSE N'value = '+ from_field
END) + ',' + cast([order] as varchar) + ' AS [order], '''+ @request_no + N''' [request_no]' +
(CASE WHEN isnull(from_table,'') = '' THEN N''
ELSE N' from ' + from_table
+ (CASE WHEN mul_field like '%[.]%' THEN (N' cross join (select DISTINCT ' + Mul_field + N' from '
+ SUBSTRING(Mul_field, 0, PATINDEX('%[.]%',Mul_field))+ N' where request_no = '''+@request_no+N''') '
+ SUBSTRING(Mul_field, 0, PATINDEX('%[.]%',Mul_field))) ELSE '' END )
+ N' where request_no = '''+@request_no+N'''' END)
from TNovaFieldMapping where form_system_id = @form_Id order by [order]
open cur_insertTMP
FETCH NEXT FROM cur_insertTMP INTO @exeValue2
WHILE (@@FETCH_STATUS = 0)
BEGIN
exec sp_executesql @exeValue2
FETCH NEXT FROM cur_insertTMP INTO @exeValue2;
END
CLOSE cur_insertTMP
DEALLOCATE cur_insertTMP
declare cur_convertXML cursor for
select isnull(to_table,'') as to_table,
isnull(to_field,'') as to_field,
isnull(key_field,'') as key_field,
isnull(dbo.funXMLReplaceSpecN(value),'') as value,
RANK() over(partition by to_table,id order by to_table,id,to_field) as ROWNO
from TNovaFieldMapping_temp where request_no = @request_no
order by [order],to_table,id,to_field
open cur_convertXML
FETCH NEXT FROM cur_convertXML INTO @toTable,@toField,@key_field,@exeValue,@rowNo
WHILE (@@FETCH_STATUS = 0)
BEGIN
if(@toTable = @lastTable)
begin
if(@rowNo = 1 and @xml2 <>'')
set @xml2 =@xml2 + '</item>'
if(@rowNo = 1)
set @xml2 =@xml2 + '<item>'
if(@key_field<>'')
set @xml2 =@xml2 + '<' + @toField + ' key='''+@key_field+'''>' + @exeValue + '</' + @toField + '>'
else
set @xml2 =@xml2 + '<' + @toField + '>' + @exeValue + '</' + @toField + '>'
end
else
begin
if(@rowNo = 1 and @xml2 <>'')
set @xml2 =@xml2 + '</item>'
if(@lastTable = '')
set @xml2 =@xml2 + '<' + @toTable + '>'
else
set @xml2 =@xml2 + '</' + @lastTable + '>' + '<' + @toTable + '>'
if(@rowNo = 1)
set @xml2 =@xml2 + '<item>'
if(@key_field<>'')
set @xml2 =@xml2 + '<' + @toField + ' key='''+@key_field+'''>' + @exeValue + '</' + @toField + '>'
else
set @xml2 =@xml2 + '<' + @toField + '>' + @exeValue + '</' + @toField + '>'
end
set @lastTable = @toTable
FETCH NEXT FROM cur_convertXML INTO @toTable,@toField,@key_field,@exeValue,@rowNo;
END
CLOSE cur_convertXML
DEALLOCATE cur_convertXML
set @xml =@xml + @xml2 +'</item></' + @lastTable + '></form>'
delete from TNovaTXMLConvert where request_no= @request_no
insert into TNovaTXMLConvert
select convert(xml,@xml) as NovaXML,@request_no as request_no
select @CompassDB = param_value from teflow_param_config where param_code= 'CompassDB'
select @sql = 'delete from '+@CompassDB+'..T_Nova_TXMLConvert where request_no = '''+@request_no+''';
insert into '+@CompassDB+'..T_Nova_TXMLConvert
select NovaXML,request_no from TNovaTXMLConvert where request_no = '''+@request_no+'''';
exec sp_executesql @sql
end try
begin catch
DECLARE @ErrorMessage NVARCHAR(4000);
DECLARE @ErrorSeverity INT;
DECLARE @ErrorState INT;
SELECT @cRETURNCODE = '9999'
if exists( select * from master.dbo.syscursors where cursor_name='cur_insertTMP')
BEGIN
CLOSE cur_insertTMP
DEALLOCATE cur_insertTMP
END
if exists( select * from master.dbo.syscursors where cursor_name='cur_convertXML')
BEGIN
CLOSE cur_convertXML
DEALLOCATE cur_convertXML
END
SELECT @ErrorMessage = ERROR_MESSAGE(),
@ErrorSeverity = ERROR_SEVERITY(),
@ErrorState = ERROR_STATE();
INSERT INTO TNovaErrlogTran
--select @request_no,'NovaUspConvertXML',@ErrorMessage,@staff_code,GETDATE()
select @request_no,'NovaUspConvertXML',CONCAT(@ErrorMessage,char(13), '******* value2', char(13) , @exeValue2 ,char(13), '******* value1', char(13), @exeValue),@staff_code,GETDATE()
GOTO EXIT_WINDOW
end catch
EXIT_WINDOW:
END