Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 indexed view: поле ntext преобразуется в nvarchar(256), но sql этого не замечает  [new]
MyNiGoo
Member

Откуда:
Сообщений: 233
Здравствуйте.
Создаю индексированное представление
create view [dbo].[vw_dwhi_Nomenclature]
with schemabinding as
select convert(uniqueidentifier, [СправочникНоменклатура].[_IDRRef]) as [Ссылка]
      ,cast([СправочникНоменклатура].[_Fld2872] as nvarchar(256))  as [Наименование полное]
from [dbo].[_Reference160] [СправочникНоменклатура]
go  

create unique clustered index IX_vw_dwhi_Nomenclature_Ссылка on vw_dwhi_Nomenclature(Ссылка)
go

Вылетает ошибка
Msg 1942, Level 16, State 1, Line 2
Не удалось создать индекс для представления, оно содержит столбцы типа text, ntext, image, FILESTREAM или xml.

Хотя если посмотреть типы полей, то все в порядке. Почему так?
Картинка с другого сайта.
18 сен 13, 09:41    [14852371]     Ответить | Цитировать Сообщить модератору
 Re: indexed view: поле ntext преобразуется в nvarchar(256), но sql этого не замечает  [new]
MyNiGoo
Member

Откуда:
Сообщений: 233
Microsoft SQL Server 2008 R2 (SP1) - 10.50.2550.0 (X64) Jun 11 2012 16:41:53 Copyright (c) Microsoft Corporation Standard Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1) (Hypervisor)
18 сен 13, 09:44    [14852383]     Ответить | Цитировать Сообщить модератору
 Re: indexed view: поле ntext преобразуется в nvarchar(256), но sql этого не замечает  [new]
Glory
Member

Откуда:
Сообщений: 104751
BOL - A view must meet the following requirements before you can create a clustered index on it:
...
- All functions referenced by expressions in the view must be deterministic. The IsDeterministic property of the OBJECTPROPERTY function reports whether a user-defined function is deterministic.

Ваше поле получилось deterministic ?
18 сен 13, 09:54    [14852434]     Ответить | Цитировать Сообщить модератору
 Re: indexed view: поле ntext преобразуется в nvarchar(256), но sql этого не замечает  [new]
MyNiGoo
Member

Откуда:
Сообщений: 233
Glory, CAST детерминирована, кроме случаев использования с datetime, smalldatetime или sql_variant.
select OBJECTPROPERTY (object_id ('vw_dwhi_Nomenclature'), 'isDeterministic')

возвращает 1
18 сен 13, 10:21    [14852596]     Ответить | Цитировать Сообщить модератору
 Re: indexed view: поле ntext преобразуется в nvarchar(256), но sql этого не замечает  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31949
MyNiGoo
Вылетает ошибка
Что то вы недоговариваете

use tempdb
go
create table dbo.tt
(
	ID varchar(100),
	Fld varchar(max)
)
go
create view [dbo].[vw]
with schemabinding as
select	convert(uniqueidentifier, tt.ID) as s,
		cast(tt.Fld as nvarchar(256))  as F
from dbo.tt
go  

create unique clustered index IX_vw_dwhi_Nomenclature_Ссылка on vw(s)
go
drop view dbo.vw
drop table dbo.tt

Всё работает.
Версия такая же, разве что SP2 и энтерпрайз
.
Microsoft SQL Server 2008 R2 (SP2) - 10.50.4000.0 (X64) Jun 28 2012 08:36:30 Copyright (c) Microsoft Corporation Enterprise Edition (64-bit) on Windows NT 6.2 <X64> (Build 9200: )
18 сен 13, 10:23    [14852614]     Ответить | Цитировать Сообщить модератору
 Re: indexed view: поле ntext преобразуется в nvarchar(256), но sql этого не замечает  [new]
MyNiGoo
Member

Откуда:
Сообщений: 233
alexeyvg, в твоем примере Fld varchar(max), а надо ntext - тогда работать не будет
18 сен 13, 10:30    [14852671]     Ответить | Цитировать Сообщить модератору
 Re: indexed view: поле ntext преобразуется в nvarchar(256), но sql этого не замечает  [new]
Glory
Member

Откуда:
Сообщений: 104751
Мне кажется, что фразу из хелпа
The view cannot include text, ntext, or image columns, even if they are not referenced in the CREATE INDEX statement.
надо понимать скорее, как поля указанных типов нельзя включать в представление в любом виде. В том числе и в выражениях
18 сен 13, 10:36    [14852724]     Ответить | Цитировать Сообщить модератору
 Re: indexed view: поле ntext преобразуется в nvarchar(256), но sql этого не замечает  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31949
MyNiGoo
alexeyvg, в твоем примере Fld varchar(max), а надо ntext - тогда работать не будет
Да, действительно, и "cast(cast(tt.Fld as nvarchar(max)) as nvarchar(256))" тоже не помогает :-(

Вот за что я не люблю text, ntext, image :-(
Что можно посоветовать, переходите на nvarchar(max)....
18 сен 13, 10:41    [14852754]     Ответить | Цитировать Сообщить модератору
 Re: indexed view: поле ntext преобразуется в nvarchar(256), но sql этого не замечает  [new]
MyNiGoo
Member

Откуда:
Сообщений: 233
Glory, скорее всего, ты прав. Но сообщение об ошибке ни разу не наводит на такую мысль, да и фразу из хелпа так трактовать можно уже только по факту. Довольно досадное обстоятельство.
18 сен 13, 11:09    [14852999]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить