フィールドのデータ型を nvarchar から int に変更できますか??
alter table employee alter column designation int
これは有効ですか?? そうでない場合は、他の方法で行うことができますか??
PS:私は使用していますMS SQL Server
フィールドのデータ型を nvarchar から int に変更できますか??
alter table employee alter column designation int
これは有効ですか?? そうでない場合は、他の方法で行うことができますか??
PS:私は使用していますMS SQL Server
テーブルの変更を試すことができます。失敗した場合は、次のようにします。
ALTER TABLE tableName ADD newCol int;
UPDATE tableName SET newCol = CAST(oldCol AS int)
;
列に値がないか空白の場合にのみ可能です。列に nvarchar 値を持つ値があり、それを int に変換しようとすると、エラーが発生します。
ALTER TABLE [table_name] ALTER COLUMN [column_name] [data_type]
これは私にとってはうまくいきました(小数では機能しますが、整数でも機能すると思います):
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 を許可することを前提としています。そうでない場合は、それも処理する必要があります。例: 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;