3

UPDATEコマンドを使用して、テーブルの文字列フィールドにプレフィックスを付けようとしています。どういうわけか私は

文字列型やバイナリは省略されます。

例外として、私のデータの長さはフィールドに簡単に収まりますが。

SQL Server 2008 R2StandardEditionおよびSSMS2008R2を使用します。

テンプレート:学習者はnvarchar(60)です

テンプレート:学習者は、sp_helpに示されているように60バイトを使用するnvarchar(30)です

select LEN('Aaaaaaaa' + LEFT(learner, 52)) myLen from Template order by myLen desc
>>> max len = 31

update Template set learner = 'Aaaaaaaa' + LEFT(learner, 52)
>>> String or binary data would be truncated.

update Template set learner = 'Aaaaaaaa' + LEFT(learner, 52)
>>> String or binary data would be truncated.

update Template set learner = CAST('Aaaaaaaa' + LEFT(learner, 52) AS NVARCHAR(60))
>>> String or binary data would be truncated.

一方、以下は機能します。

SELECT CAST('Aaaaaaaa' + LEFT(learner, 52) AS NVARCHAR(60)) FROM Template
4

3 に答える 3

6

あなたはこのメッセージを無視することを試みることができます

SET ANSI_WARNINGS OFF
update ...
SET ANSI_WARNINGS ON
于 2012-10-10T21:26:14.623 に答える
5

ご回答ありがとうございます。

sp_helpsp_columnsの長さの値にだまされたようです。NVARCHAR列であるため、長さは文字数ではなくバイト単位の長さを意味します。これは、NVARCHAR = Unicode(UTF-16)=>1文字あたり2バイトであるためです。

CREATEスクリプトを見ると、真実が明らかになりました。また、sp_columnsのPRECISIONフィールドには、文字数も表示されます。

于 2012-10-11T19:34:16.370 に答える
0

私の問題は、メインテーブルのトリガーで埋められた別のログテーブル(監査証跡用)があり、列サイズも変更する必要があることでした。

于 2014-07-03T10:21:50.507 に答える