SQL Server のテーブルの列のデータ型を変更したいと考えています。次のステートメントを使用しました。
ALTER TABLE dbo.tbltest
ALTER COLUMN ID uniqueidentifier
しかし、それはエラーをスローします
オペランド型の衝突: bigint は uniqueidentifier と互換性がありません
SQL Server のテーブルの列のデータ型を変更したいと考えています。次のステートメントを使用しました。
ALTER TABLE dbo.tbltest
ALTER COLUMN ID uniqueidentifier
しかし、それはエラーをスローします
オペランド型の衝突: bigint は uniqueidentifier と互換性がありません
整数から に変換することはできませんuniqueidentifier
。しかし、あなたはこのようにすることができます。
最初にテーブルから古いデータを削除します。
列を何らかのテキスト形式 ( などVARCHAR(200)
) に変更します。
ALTER TABLE dbo.tbltest
ALTER COLUMN ID VARCHAR(200)
ALTER TABLE dbo.tbltest
ALTER COLUMN ID uniqueidentifier
明確にするために、列を数値からuniqueidentifier
直接変換することはできませんが、に変換numeric
するvarchar
ことはできますuniqueidentifier
。
最初に列を追加し(おそらく、列を既存のデータのある行に正常に追加できるように、デフォルトまたはnull可能)、必要な値または必要な値に更新し、キーを変更する必要があります(主キーの変更の場合)新しい列に移動してから、このテーブルの外部キーも変更します)、古い列を削除し、必要に応じて新しい列を変更します(たとえば、IDシードの設定、null可能の削除など)。
Entity Framework を使用している人への注意:
明らかに、複雑なリレーションシップを持つ大規模なデータベースがある場合、すべてのリレーションシップと ID 列を削除して、それらを再度追加するのは非常に困難です。
生成されたモデル (.edmx) を更新する方がはるかに簡単です。
はい、Visual Studio では文句を言わずにデータ型を更新できます。実際、.edmx ファイルを保存すると、関係が検証されます。見逃した可能性のあるフィールドはすべてエラーとして表示されます。
完了したら、モデルからデータベースを再生成できます。ブーム、完了。
シンの答えがうまくいかない場合は、おそらくテーブルを削除して再作成する必要があります。