いくつかの背景:私はSQL Server 2005を使用しています(知っています:( ...)
簡単に言うと、 3 つの列を連結し、それらをスキーマ バインドのインデックス付きビューの列としてvarchar
変換しています。nvarchar
3 つの列はすべて pkey であり、null ではありません。ただし、変換が行われると、結果の列は null を許可するように設定され、フルテキスト インデックスに参加できなくなります。(連結が nvarchar に変換されない場合、列は暗黙的に として作成されます。) では、AND 連結 3を に変換して、結果の計算列が null を許可しないようにするnot null
にはどうすればよいでしょうか?varchars
nvarchar
詳細:
フルテキスト インデックスを適用して検索パフォーマンスを向上させるために、スキーマ バインド ビュー (インデックス付きビュー) を作成しました。SQL Server 2005でこのバグに遭遇したことを除いて、すべてが順調です
したがって、記事が示唆しているように、クラスター化インデックス (全文インデックスが構築されているもの) をNVARCHAR
fromに変換すると考えましたvarchar
。
インデックス付きの列を nvarchar に変換する前のビューのコードは次のとおりです。
CREATE VIEW [dbo].[IndexedPart] WITH SCHEMABINDING
AS
SELECT (I.ItemCode + ILP.CurrencyCode + IU.UOM) as Id, I.ItemCode, I.Image1, I.Image2, I.Image3, REPLACE(I.ShortDescription, '&','&') AS ShortDescription, I.ModelNum, REPLACE(I.ItemBrand,'&','&') AS ItemBrand, ILP.ListPrice, ILP.CurrencyCode, IU.UOM, IU.DefaultUOM,
IU.MinimumPrice, IU.MinimumOrderQty, IU.MaximumOrderQty, IU.OrderIncrement, I.LongDescription, IU.QtyAvail, irc.ReplenishmentClass,
ISNULL(rc.SortLast, 1) AS SortLast, ISNULL( I.DoNotSell, 'N') as DoNotSell,
ISNULL( I.EffectiveStatus, 'I') as EffectiveStatus, (REPLACE(I.ItemCode + ' ' + I.ShortDescription + ' ' + I.ItemBrand + ' ' + I.ModelNum,'&','&')) AS FullTextIndex
FROM dbo.Item AS I INNER JOIN
dbo.ItemUOM AS IU ON I.ItemCode = IU.ItemCode INNER JOIN
dbo.ItemListPrice AS ILP ON I.ItemCode = ILP.ItemCode AND IU.UOM = ILP.UOM INNER JOIN
dbo.ItemReplenishmentClass AS irc ON irc.ItemCode = I.ItemCode INNER JOIN
dbo.ReplenishmentClass AS rc ON irc.ReplenishmentClass = rc.ReplenishmentClass;
CREATE UNIQUE CLUSTERED INDEX [IX_ItemCode_CurrencyCode_UOM_Clustered] ON [dbo]. [IndexedPart]
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = ON, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
背景として、このビューで Id を作成するために使用している 3 つの列はすべて、他のテーブルの主キーです。
そのインデックス付きビューの Id 列に VARCHAR から NVARCHAR への変換を追加すると、同じスクリプトを実行してそのインデックスを作成できますが、突然 SQL Server がインデックスで null を許可すると判断します。つまり、そのビューにフルテキスト インデックスを作成することはできなくなりました。
とにかく、このインデックスをnullを許可する「NO」として戻すか、ID列をインデックス付きビューに追加して、記事で概説されているバグを回避できるようにすることはできますか?