フィールドのデータ型をnvarcharからintに変更できますか?
alter table employee alter column designation int
これは有効ですか??そうでない場合は、他の方法で行うことができますか?
追伸:私はMS SQL Server
を使用しています
Alter tableを試してみることができます。失敗した場合、これを行います:
_ALTER TABLE tableName ADD newCol int;
_
UPDATE tableName SET newCol = CAST(oldCol AS int) FROM tableName;
列に値がないか空白の場合にのみ可能です。列にnvarchar値を持つ値がある場合、それをintに変換しようとすると、エラーが発生します。
ALTER TABLE [table_name] ALTER COLUMN [column_name] [data_type]
これは私にとってはうまくいきました(小数で動作しますが、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
わずか2ステップで簡単に実行できます
列を更新し、すべての非数値をnullに設定して、alterが失敗しないようにします。
テーブルを変更し、タイプを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を許可しないようにテーブルを変更します。
一時列の作成
ALTER TABLE MYTABLE ADD MYNEWCOLUMN NUMBER(20,0) NULL;
古い列から新しい列にデータをコピーしてキャストします
UPDATE MYTABLE SET MYNEWCOLUMN=CAST(MYOLDCOLUMN AS NUMBER(20,0));
古い列を削除する
ALTER TABLE MYTABLE DROP COLUMN MYOLDCOLUMN;
古い名前と同じ名前に一致するように新しい名前を変更します。
ALTER TABLE MYTABLE RENAME COLUMN MYNEWCOLUMN TO MYOLDCOLUMN;
これを試してもらえますか?
alter table MyTable add MyColNum Varchar(500) null;
alter table MyTable add MyColNum int null;