Сейчас я занимаюсь разработкой высоконагруженного сайта LiquidGeneration, написанного моей командой на ASP.NET MVC 1.0, IIS 7.0, Windows 2008, MS Sql Server 2005.
Сегодня рассмотрим простую ситуацию в MS Sql Server 2005, которая вызывает ошибку
Internal Query Processor Error: The query processor could not produce a query plan. For more information, contact Customer Support Services.
USE [master] GO -- SET ANSI_PADDING that preferred on Sql Server 2005+ SET ANSI_PADDING ON GO -- drop databse if it already exists IF EXISTS (SELECT name FROM sys.databases WHERE name = N'test') DROP DATABASE [test] GO CREATE DATABASE [test]; GO USE [test] GO CREATE TABLE [dbo].[CHILD]( [ID] [int] NOT NULL, [SOME_FIELD] [nvarchar](40) NOT NULL ) ON [PRIMARY] GO -- create table with computed field. it's important! CREATE TABLE [dbo].[PARENT]( [ID] [int] NOT NULL, [NAME] [nvarchar](40) NOT NULL, [COMPUTED_FIELD] AS (replace([NAME],' ','_')) PERSISTED, CONSTRAINT [PK_PARENT] PRIMARY KEY CLUSTERED ([ID] ASC)) --create foreign key constraint ALTER TABLE [dbo].[CHILD] ADD CONSTRAINT [FK_PARENT_CHILD] FOREIGN KEY([ID]) REFERENCES [dbo].[PARENT] ([ID]) GO -- insert some data into tables -- to verify that insert operation works well INSERT PARENT SELECT 1, 'bill' UNION ALL SELECT 2, 'john' UNION ALL SELECT 3, 'jett' INSERT CHILD SELECT 1, 'test1' UNION ALL SELECT 2, 'test2' UNION ALL SELECT 3, 'test3' GO -- create stored procedure that perform the same insert that previous sql command -- it use child table that has foreign key to parent table with computed field CREATE PROCEDURE [dbo].[sp_InsertIntoChild] AS BEGIN INSERT CHILD SELECT 3, 'test4' END GO -- set padding off - it's default settings for connections from DB-Library applications SET ANSI_PADDING OFF GO -- run stored procedure EXEC [dbo].[sp_InsertIntoChild] SELECT * FROM [CHILD]
Исправить проблему можно достаточно просто установив SET ANSI_PADDING ON, но при вызове из приложения при создании соединения установить это невозможно.
Ошибка обрабатывается специалистами Microsoft, обещали исправить.
Sql cкипрт
0 коммент.:
Отправить комментарий