ただ 。
ただし、私のチェックの1つは、パラメーターがテーブルの列の長さと一致することを確認することであるため、問題に気づいたことはありません。クライアントコードでも。個人的には、SQLで長すぎるデータが表示されることはないと思います。切り捨てられたデータを見た場合、それを引き起こした原因は明らかです。
varchar(max)の必要性を感じた場合は、データ型の優先順位のために、パフォーマンスの大きな問題に注意してください。 varchar(max)はvarchar(n)よりも優先順位が高くなります(最長が最高です)。したがって、このタイプのクエリでは、シークではなくスキャンが取得され、すべてのvarchar(100)値はCASTからvarchar(max)になります
UPDATE ...WHERE varchar100column = @varcharmaxvalue
編集:
この問題に関する未解決のMicrosoftConnectアイテムがあります。
そして、それはおそらくErland SommarkogのStrict設定(および一致するConnectアイテム)に含める価値があります。
マーティンズのコメントの後、編集2:
DECLARE @sql VARCHAR(MAX), @nsql nVARCHAR(MAX);
SELECT @sql = 'B', @nsql = 'B';
SELECT
LEN(@sql),
LEN(@nsql),
DATALENGTH(@sql),
DATALENGTH(@nsql)
;
DECLARE @t table(c varchar(8000));
INSERT INTO @t values (replicate('A', 7500));
SELECT LEN(c) from @t;
SELECT
LEN(@sql + c),
LEN(@nsql + c),
DATALENGTH(@sql + c),
DATALENGTH(@nsql + c)
FROM @t;