2009-08-24 9 views
124

私が使用してSQL Server内の列のサイズを変更しようとしています:Addr1の長さが元々あった場所40SQL Serverでスキーマバインドビューで参照される列のサイズを変更する

ALTER TABLE [dbo].[Address] 
ALTER COLUMN [Addr1] [nvarchar](80) NULL 

それは、このエラーを上げ、失敗しました:

The object 'Address_e' is dependent on column 'Addr1'. 
ALTER TABLE ALTER COLUMN Addr1 failed because one or more objects access 
this column. 

私はそれをよく読んしようとしましたし、ために、いくつかのビューは、このコラムを参照しているようで、SQL Serverが実際にドロップしようとしているようですエラーを発生させた列。

Address_eは、以前のDB管理者が作成したビューです。

カラムのサイズを変更する方法は他にありますか?

+1

「Address_e」とは何ですか? – devio

+2

Address_eは、前回のDB管理者が作成したビューです。そしてRemusが述べたように、それはSCHEMABINDINGが定義されています。 – Staelen

答えて

57

ビューはおそらくWITH SCHEMABINDINGオプションを使用して作成されます。これは、これらの変更を防ぐために明示的に配線されていることを意味します。スキーマバインドがうまくいって、それらのビューを壊すのを防ぐように見える、幸運な日、heh?データベースに影響を与えると、データベース管理者に連絡して変更を依頼してください。 MSDNから

SCHEMABINDING

Binds the view to the schema of the underlying table or tables. When SCHEMABINDING is specified, the base table or tables cannot be modified in a way that would affect the view definition. The view definition itself must first be modified or dropped to remove dependencies on the table that is to be modified.

+1

私はいつもスキーマバインディングを使用しています... – gbn

+1

おかげさまでRemus、ビューにはSCHEMABINDINGが定義されています。制約をバイパスする簡単な方法はありますか、それとも実際にはビューを削除する必要がありますか? – Staelen

+1

あなたはそれを迂回することはできません、それはその全目的です。誰かがテーブルの変更を防ぐためにschemabindigを追加するために余分な長さに行きました。これは何らかの事故ではなく、人が何をしているかを知っているように見えます。テーブルを変更してもよろしいですか? –

5

このリンク

Resize or Modify a MS SQL Server Table Column with Default Constraint using T-SQL Commands

を参照してください

なSQL Serverの問題の解決策は、

ドロップするつもりかにDEFAULT制約を無効にしていますテーブルの列。

テーブルの列のデータ型および/またはデータサイズを変更します。

デフォルトの制約を再作成または有効にして、SQLテーブルの列に戻します。あまりにもあなたのために働く可能性があります

さようならここ

258
ALTER TABLE [table_name] ALTER COLUMN [column_name] varchar(150) 
+3

パーフェクトコード... 私はそれをチェック..... –

+11

ナー、問題はレムスが言ったようだった。コード自体に何も問題はありません – Staelen

+11

@NilRadうん、おそらくあなたはPL-SQLを考えていますか? ALTER COLUMNはSQL 2008 R2の正しい構文です – schmidlop

2

は、私が使用しているプログラムのバージョンで動作するものです。

私はそれを実行する命令とコマンドを配置します。 classはテーブルの名前です。あなたはテーブルの中でそれをこの方法で変更します。検索プロセスのリターンだけではありません。


は、テーブルクラスを全体ラベルに合わせて

select * from class 

変化列の長さFacID( "FACI" として見られる)と( "classnu" として見られる)classnumberを表示します。

alter table class modify facid varchar (5); 

alter table class modify classnumber varchar(11); 

ビューテーブルは再び


(違いを確認するために、再度コマンドを実行します)違い

select * from class; 

を見てこれは良いため、実際のテーブルを変更し、しかし、より良い。

P.S.私はこれらの指示をコマンドの注釈として作った。これはテストではありませんが、1つに役立つ可能性があります。

6

SQL Server 2008で "レプリケートされたテーブルの列幅を増やす"場合は、 "replicate_ddl=1"のプロパティを変更する必要はありません。単純に下記の手順 - パブリッシャデータベース

  • runコマンドへ

    1. オープンSSMS
    2. 接続 - ALTER TABLE [Table_Name] ALTER COLUMN [Column_Name] varchar(22)
    3. それはvarchar(x)からvarchar(22)に列幅を増加させ、あなたが加入者に見ることができ、同じ変更されます(トランザクションが複製された)。したがって、複製を再初期化する必要はありません。

    これは、これを探しているすべての人に役立つことを願っています。

  • 0

    カラムの照合を確認してください。このスクリプトは、照合順序を表のデフォルトに変更することがあります。現在の照合順序をスクリプトに追加します。

    関連する問題