vBulletin Search Engine Optimization
| |||||||
| Register | FAQ | Members List | Calendar | Search | Today's Posts | Mark Forums Read |
| ||||
| I have a problem with inserting records into table when an indexed view is based on it. Table has text field (without it there is no problem, but I need it). Here is a sample code: USE test GO CREATE TABLE dbo.aTable ( [id] INT NOT NULL , [text] TEXT NOT NULL ) GO CREATE VIEW dbo.aView WITH SCHEMABINDING AS SELECT [id] , CAST([text] AS VARCHAR(8000)) [text] FROM dbo.aTable GO CREATE TRIGGER dbo.aTrigger ON dbo.aView INSTEAD OF INSERT AS BEGIN INSERT INTO aTable SELECT [id], [text] FROM inserted END GO Do the insert into aTable (also through aView). INSERT INTO dbo.aTable VALUES (1, 'a') INSERT INTO dbo.aView VALUES (2, 'b') Still do not have any problem. But when I need index on view CREATE UNIQUE CLUSTERED INDEX [id] ON dbo.aView ([id]) GO I get following error while inserting record into aTable: -- Server: Msg 8626, Level 16, State 1, Procedure aTrigger, Line 4 -- Only text pointers are allowed in work tables, never text, ntext, or image columns. The query processor produced a query plan that required a text, ntext, or image column in a work table. Does anyone know what causes the error? |
| ||||
| ing42 (Inga.Korczowska@gmail.com) writes: > Do the insert into aTable (also through aView). > > INSERT INTO dbo.aTable VALUES (1, 'a') > INSERT INTO dbo.aView VALUES (2, 'b') > > Still do not have any problem. But when I need index on view > > CREATE UNIQUE CLUSTERED INDEX [id] ON dbo.aView ([id]) > GO > > I get following error while inserting record into aTable: > > -- Server: Msg 8626, Level 16, State 1, Procedure aTrigger, Line 4 > -- Only text pointers are allowed in work tables, never text, ntext, or > image columns. The query processor produced a query plan that required > a text, ntext, or image column in a work table. > > Does anyone know what causes the error? Did you notice the warning when you created the index: Warning: The optimizer cannot use the index because the select list of the view contains a non-aggregate expression. So the index is not of much use. I guess you have hit a restriction in SQL Server, which does not report as such in a nice way. When I run your code in SQL 2005, I get: Msg 1942, Level 16, State 1, Line 1 Cannot create index on view 'tempdb.dbo.aView'. It contains text, ntext, image or xml columns. Which is a more resolute message. -- Erland Sommarskog, SQL Server MVP, esquel@sommarskog.se Books Online for SQL Server 2005 at http://www.microsoft.com/technet/pro...ads/books.mspx Books Online for SQL Server 2000 at http://www.microsoft.com/sql/prodinf...ons/books.mspx |