2

いくつかの背景:私はSQL Server 2005を使用しています(知っています:( ...)

簡単に言うと、 3 つの列を連結し、それらをスキーマ バインドのインデックス付きビューの列としてvarchar変換しています。nvarchar3 つの列はすべて pkey であり、null ではありません。ただし、変換が行われると、結果の列は null を許可するように設定され、フルテキスト インデックスに参加できなくなります。(連結が nvarchar に変換されない場合、列は暗黙的に として作成されます。) では、AND 連結 3を に変換して、結果の計算列が null を許可しないようにするnot nullにはどうすればよいでしょうか?varcharsnvarchar

詳細:

フルテキスト インデックスを適用して検索パフォーマンスを向上させるために、スキーマ バインド ビュー (インデックス付きビュー) を作成しました。SQL Server 2005でこのバグに遭遇したことを除いて、すべてが順調です

したがって、記事が示唆しているように、クラスター化インデックス (全文インデックスが構築されているもの) をNVARCHARfromに変換すると考えました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列をインデックス付きビューに追加して、記事で概説されているバグを回避できるようにすることはできますか?

4

1 に答える 1

0

私が見つけたのは、残念ながらビューではこれを行うことができないということです。回避策は?SQL 2008 (私の好み) にアップグレードし、ビューのすべての列を持ち、nvarchar データ型を持つ ssis/dts を介して入力されるテーブルを作成します。

素晴らしい解決策ではありませんが、それでも解決策です。

于 2013-11-07T15:33:41.870 に答える