値が長すぎる文字列がある場合、インデックスの作成は失敗します。SQL Server 2012を使用して小さなテストコードを試しました。
CREATE TABLE dbo.foo
(ID bigint not null identity(1,1),
SerializedValue nvarchar(max),
LongValue as TRY_CAST(SerializedValue as bigint));
INSERT INTO dbo.foo (serializedvalue) VALUES(REPLICATE(' ', 4000)+'1');
CREATE INDEX GotToTry ON foo(LongValue);
DROP TABLE dbo.foo;
GO
私の簡単な実験では、nvarchar(max)の値が4000文字以下である限り、コードが機能することがわかりました。(もちろん、末尾に何もないすべての空白は文字に変換されないため、問題なく機能します。)4001番目の文字はString or binary data would be truncated
メッセージをトリガーします。したがって、4000文字を超えるSerializedValueのデータを調べることができます。
編集:はい、変換はBIGINT
。問題はないがBIGINT
、しかし、ですNVARCHAR(MAX)
。例えば:
- 行に「1111111111111111111」が含まれている場合は、両方
CREATE INDEX
で値がに変換されBIGINT
ます。
- 行が0から4000 '1'の場合は可能
CREATE INDEX
ですが、値がNULL
オーバーフローしている可能性がありますBIGINT
。
- 行が4000文字より長い場合、
CREATE INDEX
失敗します。
したがって、NVARCHAR(MAX)の実際の内容がCREATE INDEXにとって重要であるようです。
編集:Jon Seigelは、文字列がnvarchar(4000)よりも長い場合、TRY_CASTがcreate indexでエラーをトリガーすることを特定しました。