Reply to Re: data length more than ...

Your name:

Reply:


Posted by M A Srinivas on 03/29/07 09:36

On Mar 28, 4:05 pm, "AJA" <ajanospa...@gazeta.pl> wrote:
> Hello
> I have problem with reading from XML when XML is to large.
> Program delare 1-n variables where is declaration but can no make more
> delarations than length 8000 :((
>
> drop table tblBooksEx
> CREATE TABLE [tblBooksEx] (
> [Row_ID] [int] IDENTITY (1, 1) NOT NULL ,
> [BooksData] [text] COLLATE Polish_CI_AS NULL ,
> CONSTRAINT [PK__tblBooksEx__17036CC0] PRIMARY KEY CLUSTERED
> (
> [Row_ID]
> ) ON [PRIMARY]
> ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
> GO
> insert into tblBooksEx(booksdata) values('')
> exec master..xp_cmdshell 'TextCopy.exe /S serv /U usr /Ppsv /D Northwind /T
> tblBooksEx /C BooksData /F c:\SCN.xml /W "WHERE Row_ID=1" /I'
>
> /*PART 1*/
> DECLARE @id int
> DECLARE @idoc int
> SET @id = 1 -- or whatever the id
>
> DECLARE @datalen int
> DECLARE @sql varchar(8000)
> DECLARE @sql1 varchar(8000)
> DECLARE @cnt int
> -- get the length
> SELECT @datalen = DATALENGTH (booksdata) / 4000 + 1 FROM tblBooksEx WHERE
> row_id = @id
>
> -- phase 1 collect into @sql declarations of @str1, @str2,...@strn
> SET @cnt = 1
> SET @sql='DECLARE '
> SET @sql1 = ''
> WHILE (@cnt <= @datalen)
> BEGIN
> SELECT
> @sql = @sql + CASE @cnt
> WHEN 1 THEN ''
> ELSE ', ' + CHAR(13)
> END
> + ' @str'+CONVERT(varchar(10),@cnt)+' VARCHAR(4000)'
> SET @cnt = @cnt + 1
> END
> -- phase 2 collect into @sql selection of chunks (takng care of length)
> SET @cnt = 1
> WHILE (@cnt <= @datalen)
> BEGIN
> IF LEN(@sql) < 7850
> SELECT @sql = @sql + CHAR (13) +
> 'SELECT @str' + CONVERT(VARCHAR(10), @cnt) + ' =
> REPLACE(SUBSTRING(booksdata, ' +
> CONVERT(VARCHAR(30), (@cnt-1)*4000+1) + ', 4000),CHAR(39),
> CHAR(39)+CHAR(39) ) ' +
> 'FROM tblBooksEx ' +
> 'WHERE row_id = ''' + cast(@id as varchar) + ''''
> ELSE
> SELECT @sql1 = @sql1 + CHAR (13) +
> 'SELECT @str' + CONVERT(VARCHAR(10), @cnt) + ' =
> REPLACE(SUBSTRING(booksdata, ' +
> CONVERT(VARCHAR(30), (@cnt-1)*4000+1) + ', 4000),CHAR(39),
> CHAR(39)+CHAR(39) ) ' +
> 'FROM tblBooksEx ' +
> 'WHERE row_id = ''' + cast(@id as varchar) + ''''
> SET @cnt = @cnt + 1
> END
>
> /*PART 2*/
> -- phase 3 preparing the 2nd level dynamic sql
> SELECT @sql1 = @sql1 + CHAR(13) + 'EXEC ('+ CHAR(13) + '''DECLARE @idoc
> int'+ CHAR(13) +
> 'EXEC sp_xml_preparedocument @idoc OUT, '''''' + '
> SET @cnt = 1
> WHILE (@cnt <= @datalen)
> BEGIN
> SELECT @sql1 = @sql1 + CHAR (13) + '@str' + CONVERT (varchar(10), @cnt) + '
> +'
> SET @cnt = @cnt + 1
> END
> SET @sql1 = @sql1 + ' '''''' '
> SET @sql1 = @sql1 + CHAR(13) + 'DECLARE idoc_cur CURSOR FOR SELECT @idoc'''
> +CHAR(13) + ')'
> --debug code
> /*
> PRINT @sql
> PRINT '@sql length=' +convert(varchar(5),datalength(@sql))
> PRINT '----------'
> PRINT @sql1
> PRINT '@sql1 length=' +convert(varchar(5),datalength(@sql1))
> */
> EXEC (@sql + @sql1)
> OPEN idoc_cur
> FETCH NEXT FROM idoc_cur into @idoc
> DEALLOCATE idoc_cur
>
> select * from OpenXML(@idoc, '//transfer/body', 2) WITH (ng int, nk int, dw
> nvarchar(50))
> --When Complete
> --/*
> exec sp_xml_removedocument @idoc
> --*/
>
> How to solve this problem??
>
> Best Regards
> AJA

If you make an SP(stored Procedure) out of the Code , you can send
xml to SP as a text parameter

[Back to original message]


Удаленная работа для программистов  •  Как заработать на Google AdSense  •  England, UK  •  статьи на английском  •  PHP MySQL CMS Apache Oscommerce  •  Online Business Knowledge Base  •  DVD MP3 AVI MP4 players codecs conversion help
Home  •  Search  •  Site Map  •  Set as Homepage  •  Add to Favourites

Copyright © 2005-2006 Powered by Custom PHP Programming

Сайт изготовлен в Студии Валентина Петручека
изготовление и поддержка веб-сайтов, разработка программного обеспечения, поисковая оптимизация