Reply to XML, schema collection and "large value types out of row" problem

Your name:

Reply:


Posted by eduardasm on 03/21/07 11:56

Hello,

I have a problem with XML schema update for one XML column (problem
exists in both SP1 and SP2 for SQL Server 2005).

1. I have a table that looks like this:
CREATE TABLE [dbo].[tProduct](
[ProductId] [uniqueidentifier] NOT NULL DEFAULT (newid()),
[Caption] [nvarchar](500) NOT NULL,
[XMLName] [xml] NULL,
[XMLBlob] [xml](CONTENT [dbo].[ProductInputXml]) NULL,
[SyncDate] [timestamp] NULL,
CONSTRAINT [PK_tProduct] PRIMARY KEY CLUSTERED
(
[ProductId] ASC
))

2. I have to update the xml schema for XMLBlob. The datalength inside
XMLBlob is bigger than 8060, that is why it is stored as follows::
EXEC sp_tableoption N'dbo.tProduct', 'large value types out of row',
1;

3. I create a backup table, move XML to the backup table, alter the
column data type to regular xml, drop schema and create a new one.
Then I bind the column to the xml schema collection. (Here I do not
care about XMLName column)

CREATE TABLE dbo.tProductBackup(
[ProductId] [uniqueidentifier] NOT NULL,
[XMLBlob] [xml] NULL
)
GO

EXEC sp_tableoption N'dbo.tProductBackup', 'large value types out of
row', 1;
GO

INSERT INTO dbo.tProductBackup(ProductId, XMLBlob)
SELECT ProductId, XMLBlob
FROM dbo.tProduct;
GO

UPDATE dbo.tProduct
SET XMLBlob = NULL, XMLName = NULL;
GO

ALTER TABLE dbo.tProduct
ALTER COLUMN XMLBlob XML
GO

IF EXISTS (SELECT * FROM sys.xml_schema_collections c, sys.schemas s
WHERE c.schema_id = s.schema_id AND (quotename(s.name) + '.' +
quotename(c.name)) = N'[dbo].[ProductInputXml]')
DROP XML SCHEMA COLLECTION [dbo].[ProductInputXml]
GO

CREATE XML SCHEMA COLLECTION [dbo].[ProductInputXml]
AS '.... xsd ....'
GO

ALTER TABLE dbo.tProduct
ALTER COLUMN XMLBlob XML(dbo.ProductInputXml)
GO

EXEC sp_tableoption N'dbo.tProduct', 'large value types out of row',
1;
GO

4. When I try to update the original table I get the error message:

UPDATE dbo.tProduct
SET XMLBlob = b.XMLBlob
FROM dbo.tProduct, dbo.tProductBackup b
WHERE dbo.tProduct.ProductId = b.ProductId
GO

Msg 511, Level 16, State 1, Line 1
Cannot create a row of size 8064 which is greater than the allowable
maximum of 8060.
The statement has been terminated.

Can anybody see what is wrong here?

/Ed

[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

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