web-dev-qa-db-ja.com

データを失うことなくSQLデータベースの列データ型を変更する方法

私はSQL Serverデータベースを持っていて、私はintからboolに列の1つの型を変更できることに気付きました。

そのテーブルにすでに入力されているデータを失うことなく、どうすればそれを行うことができますか?

175
Ivan Stoyanov

次のコマンドを使って簡単にこれを行うことができます。 0の値は0(BIT = false)になり、それ以外の値は1(BIT = true)になります。

ALTER TABLE dbo.YourTable
   ALTER COLUMN YourColumnName BIT

もう1つの方法は、BIT型の新しい列を作成し、それを古い列から入力し、完了したら古い列を削除して新しい列の名前を古い名前に変更することです。そうすれば、変換中に問題が発生した場合でも、すべてのデータが残っているのでいつでも元に戻すことができます。

300
marc_s

それが有効な変更であれば。

あなたはプロパティを変更することができます。

[ツール] - > [オプション] - > [設計者] - > [テーブルとデータベースの設計者] - > [選択解除] - >テーブルの再作成が必要な変更を保存しないようにします。

これで、テーブルを再作成したり、レコードを失うことなく、列名を簡単に変更できます。

17
Sathish
ALTER TABLE tablename
ALTER COLUMN columnname columndatatype(size)

注:列のサイズがある場合は、そのサイズも書いてください。

15

なぜあなたはデータを失うと思いますか? Management Studioにアクセスしてデータ型を変更するだけです。既存の値がブール値(ビット)に変換されることができればそれはそれをするでしょう。つまり、元のフィールドで「1」がtrueにマッピングされ、「0」がfalseにマッピングされる場合は問題ありません。

7

t-SQL(MSSQL)を使用している場合このスクリプトを試してください:

ALTER TABLE [Employee] ALTER COLUMN [Salary] NUMERIC(22,5)

mySQLを使用している場合このスクリプトを試してください:

ALTER TABLE [Employee] MODIFY COLUMN [Salary] NUMERIC(22,5)

oracleを使用している場合このスクリプトを試してください:

ALTER TABLE [Employee] MODIFY [Salary] NUMERIC(22,5)
4
NullException

ツール - オプション - デザイナー - テーブルとデータベースデザイナーに行き、保存オプションのチェックを外します enter image description here

3

列のチェックタイプを使用して列データタイプを変更します。

IF EXISTS(
       SELECT 1
       FROM   sys.columns
       WHERE  NAME = 'YourColumnName'
              AND [object_id] = OBJECT_ID('dbo.YourTable')
              AND TYPE_NAME(system_type_id) = 'int'
   )
    ALTER TABLE dbo.YourTable ALTER COLUMN YourColumnName BIT
2
Ebrahim Sabeti

私にとっては、SQL Server 2016では、私はこれをこのようにします

*列Column1をcolumn2に名前変更する

EXEC sp_rename 'dbo.T_Table1.Column1', 'Column2', 'COLUMN'

*列の型を文字列からintに変更するには:(データの形式が正しいことを確認してください

ALTER TABLE dbo.T_Table1 ALTER COLUMN Column2  int; 
1
MNF

コンパクト版では、datetimeデータ型のサイズは自動的に設定されます(8)。そのため、フィールドのサイズを設定してこの操作のエラーを生成する必要はありません。

0
Hardik