2016-07-25 30 views
2

SQL Server 2008にNVARCHAR(MAX)という列の1つを持つ既存のテーブルがあり、その中に10文字未満の値しかありません。 この表は実稼働中であり、データが入っています。nvarchar(max)からnvarchar(50)に列を変更する方法

私はこの列をNVARCHAR(MAX)からNVARCHAR(50)に変更する必要があります。 T SQL Serverでは、この操作を実行中に切り捨てエラーが発生する、その列のデータは10文字未満です。

は、これが私のスクリプトです:

ALTER TABLE [dbo].[Table] ALTER COLUMN [Column1] NVARCHAR (50) NOT NULL 
+3

* exact *エラーとは何ですか?データが実際に10文字未満であると確信していますか? 'WHERE LEN(Column1)> 50'行を照会してみてください。また、 'NVARCHAR(MAX)'は* blobs *を格納するための型であり、SQL Serverは型の変更を許可しないことに注意してください。そのため、完全なエラーメッセージ –

+4

を投稿する必要があります。「その列のデータは10文字未満です」 - 本当ですか?末尾に空白を入れるのは簡単です。 SELECT * FROM dbo.TABLE WHERE LEN(Column1)> 50を実行してください。 – DaveBoltman

+1

また、実際にはエラーですか、それとも警告ですか? – HoneyBadger

答えて

3

まず、このクエリを使用して、テーブルのデータを確認してください:

SELECT DATALENGTH(Column_Name) AS FIELDSIZE, Column_Name 
FROM Table_Name 

すべてがうまくている場合、あなたはPrevent Saving Changesオプションをチェックしている可能性があります。確認するには、次の手順に従います。

ツール>デザイナーチェックを外しあなたは、その後、データを失うことはないだろうと確信している場合、テーブルの再作成

+0

に変換することはできません。変更を保存しないことは、そのひどいテーブルデザイナを使用している場合にのみ有効です。代わりにalter table文を書く方がはるかに簡単です。 –

+0

これには、本番データベースのManagement Studioにアクセスする必要があります。私はいくつかのSQLスクリプトベースのソリューションが必要です。 – Prado

+0

ライブサーバー接続文字列を使用している場合は、SQL Serverによって接続しようとします。 オープンしてからssmsと入力してサーバー名を入力してください 認証はSQL Server認証 ログインとパスワードとこれ以降のプロジェクト接続文字列でこの変更が適用されます。ありがとうございました –

0

を必要防ぐ保存の変更:

Update myTable set myNVMaxCol = left(coalesce(myNVMaxCol,''),50); 
Alter table myTable alter column myNVMaxCol nvarchar(50) not null; 
+1

または、新しい列にデータを移動し、古いcomunを削除してから名前を変更します。 – HLGEM

関連する問題