2011-07-11 10 views
0

プライマリキーのカラムサイズが50のテーブルがあります。いくつかの新しい要件のために、サイズを255に増やす必要があります。主キー制約の一部である場合、列を変更することは可能です。だから、私は制約を取り除き、列を変更し、制約を戻すアプローチを取った。 しかし、私はまだ小さな問題が発生しています、私の元の列の型null以外のものであり、デフォルト値が設定されているが、私は次のSQLをしようとすると、今、私はエラー「DEFAULTの近くに不適切な構文」を取得テーブルのプライマリキーのカラムサイズを255に変更

ALTER TABLE [tblLocation] 
DROP CONSTRAINT [PK_tblLocation] 

ALTER TABLE [tblLocation] 
ALTER COLUMN Location VARCHAR(255) DEFAULT('New Location') NOT NULL 

ALTER TABLE [tblLocation] 
ADD 
CONSTRAINT [PK_tblLocation] PRIMARY KEY CLUSTERED 
(
[Location] ASC 
) 

ありがとうございました。 Javidあなたは同時にコラム制約(ここでは、デフォルト)の両方を変更するには「列を変更... ALTER TABLEを `使用することはできません

+2

あなたはクラスタリングキーとして 'VARCHAR(255)'を持っていません。 !! [Kimberly Trippのブログ記事](http://www.sqlskills.com/BLOGS/KIMBERLY/post/Ever-increasing-clustering-key-the-Clustered-Index-Debateagain!.aspx)で、良いクラスタリングキーを1つのポイントが**狭い** - INT(4バイト)は大、BIGINT(8バイト)はOK、GUID(16バイト)は許容されるかもしれませんが、それ以外のものは特に**可変幅**カラム - 狂気です。 –

+0

非常に真実で、うまくいけば彼はそれを変更することができます。しかし、あなたはそれを見たことがありますか(おそらく最終的に) "私は構造がうんざりだと知っていますが、私はそれを変更することはできません"と言っています...? –

+0

@Philip Kelley:あまりにも多く - しかし、しばしば、もしその人が実際に構造を変更できないのか、それとも彼がそれをやるのが面倒かどうかは疑問に思えます..... –

答えて

1

。最初に列を変更してから、デフォルトの制約を変更する必要があります。

+0

はい私は同じアプローチを使用しています。私は、既定の制約が既に設定されている列を変更すると、列が変更されたときに既定値を追加する必要がないことがわかりました。 – user320587

1

問題は2番目のALTER TABLEステートメントのSQL構文にあります。あなたは制約名を指定する必要があり、デフォルト値変更するとき

ALTER TABLE [tblLocation] 
ADD CONSTRAINT DF_tblLocation_Location DEFAULT 'New Location' FOR Location 

を(私はよく分からないが、なぜ私はそれがALTER TABLE構文からTABLE構文の変更をCREATEだけということだと仮定します。)

しかし、主キー列にデフォルト値を設定することは意味がありません。

関連する問題