web-dev-qa-db-ja.com

SQLは列データ型をnvarcharからintに変更します

フィールドのデータ型をnvarcharからintに変更できますか?

alter table employee alter column designation int

これは有効ですか??そうでない場合は、他の方法で行うことができますか?

追伸:私はMS SQL Serverを使用しています

13
Mohit Jain

Alter tableを試してみることができます。失敗した場合、これを行います:

  1. 整数の新しい列を作成します。

_ALTER TABLE tableName ADD newCol int;_

  1. 古い列から新しい列にデータを選択します。

UPDATE tableName SET newCol = CAST(oldCol AS int) FROM tableName;

  1. 古い列をドロップします
17
dcaswell

列に値がないか空白の場合にのみ可能です。列にnvarchar値を持つ値がある場合、それをintに変換しようとすると、エラーが発生します。

ALTER TABLE [table_name] ALTER COLUMN [column_name] [data_type]
10
S. S. Rawat
  1. 新しい数値列を追加します。
  2. トリムと変換を使用して、古いchar列から新しい列にコピーします。
  3. 古いchar列を削除します。
  4. 数値列の名前を古い列名に変更します。

これは私にとってはうまくいきました(小数で動作しますが、intでも動作すると思います):

alter table MyTable add MyColNum decimal(15,2) null
go
update MyTable set MyColNum=CONVERT(decimal(15,2), REPLACE(LTRIM(RTRIM(MyOldCol)), ',', '.')) where ISNUMERIC(MyOldCol)=1
go
alter table MyTable drop column MyOldCol
go
EXEC sp_rename 'MyTable.MyColNum', 'MyOldCol', 'COLUMN'
go
5
Alexandr

わずか2ステップで簡単に実行できます

  1. 列を更新し、すべての非数値をnullに設定して、alterが失敗しないようにします。

  2. テーブルを変更し、タイプをintに設定します。

UPDATE employee
SET designation = (CASE WHEN ISNUMERIC(designation)=1 THEN CAST(CAST(designation AS FLOAT) AS INT)END )

ALTER TABLE employee
ALTER COLUMN designation INT

これは、列がヌルを許可するという仮定を取ります。そうでない場合は、同様に処理する必要があります。たとえば、列を変更してnullを許可し、intに変換した後、すべてのnull値を0に設定し、nullを許可しないようにテーブルを変更します。

3
  1. 一時列の作成

    ALTER TABLE MYTABLE ADD MYNEWCOLUMN NUMBER(20,0) NULL;

  2. 古い列から新しい列にデータをコピーしてキャストします

    UPDATE MYTABLE SET MYNEWCOLUMN=CAST(MYOLDCOLUMN AS NUMBER(20,0));

  3. 古い列を削除する

    ALTER TABLE MYTABLE DROP COLUMN MYOLDCOLUMN;

  4. 古い名前と同じ名前に一致するように新しい名前を変更します。

    ALTER TABLE MYTABLE RENAME COLUMN MYNEWCOLUMN TO MYOLDCOLUMN;

2
Jorciney

これを試してもらえますか?

alter table MyTable add MyColNum Varchar(500) null;
alter table MyTable add MyColNum int null;
0
Suresh