Kobarin's Development Blog

C#やASP.NET、公開APIなどについての記録です。

SQLserverで、データベースダイアログが出来ない

SQLserver2008で、旧SQLserverからバックアップ&リストアしたDBでデータベースダイアログを行おうとしても、以下のようなエラーが出て実行できない件。

列名 'uvalue' が無効です。
列名 'uvalue' が無効です。
ストアド プロシージャ 'dbo.sp_upgraddiagrams' が見つかりませんでした。
オブジェクトが無効です。拡張プロパティが 'dbo.sysdiagrams' で許可されていないか、オブジェクトが存在しません。
オブジェクトが無効です。拡張プロパティが 'dbo.sp_upgraddiagrams' で許可されていないか、オブジェクトが存在しません。 (.Net SqlClient Data Provider)

                                                          • -

ヘルプを表示するには http://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Server&ProdVer=10.00.2531&EvtSrc=MSSQLServer&EvtID=207&LinkId=20476 をクリック

                                                          • -

サーバー名: FSKSVR1\SQLEXPRESS
エラー番号: 207
重大度: 16
状態: 1
プロシージャ: sp_upgraddiagrams
行番号: 55

ちなみに英語ではこんな感じ。

Invalid column name 'uvalue'.
Invalid column name 'uvalue'.
Could not find stored procedure 'dbo.sp_upgraddiagrams'.
Object is invalid. Extended properties are not permitted on 'dbo.sysdiagrams', or the object does not exist.
Object is invalid. Extended properties are not permitted on 'dbo.sp_upgraddiagrams', or the object does not exist. (Microsoft SQL Server, Error: 207)

原因

よくわからないけど、解決方法を見る限りでは、どうやら「dbo.dtproperties」テーブルに「uvalue」というフィールドが存在しない事が原因のようだ。
SQLserverにおける「value」フィールドが同じ役目を果たしていたようだ。

解決方法

以下のように実行すると良い。

use ;
ALTER TABLE dbo.dtproperties ADD uvalue NVARCHAR(255) NULL
IF EXISTS (SELECT * FROM dbo.dtproperties) EXEC ('UPDATE dbo.dtproperties SET uvalue = CONVERT(NVARCHAR(255), value)')

にはDB名を入れる。
その後、「データベース ダイアグラム」右クリックより「ダイアグラムサポートをインストール」を実行できる。

▼ソース
http://forums.databasejournal.com/showthread.php?t=41807
の末尾(ここまで探すの苦労した・・・)