17

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

alter table employee alter column designation int

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

PS:私は使用していますMS SQL Server

4

6 に答える 6

22

テーブルの変更を試すことができます。失敗した場合は、次のようにします。

  1. 整数である新しい列を作成します。

ALTER TABLE tableName ADD newCol int;

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

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

  1. 古い列をドロップします
于 2013-08-28T06:15:12.977 に答える
14

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

ALTER TABLE [table_name] ALTER COLUMN [column_name] [data_type]
于 2013-08-28T07:20:13.220 に答える
5
  1. 新しい数値列を追加します。
  2. トリムと変換を使用して、古い char 列から新しい列にコピーします。
  3. 古い char 列を削除します。
  4. 数値列の名前を古い列名に変更します。

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

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
于 2014-12-15T05:17:34.380 に答える
4

わずか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 を許可することを前提としています。そうでない場合は、それも処理する必要があります。例: null を許可するように列を変更し、int に変換した後、すべての null 値を 0 に設定し、null を許可しないようにテーブルを変更します。

于 2015-05-06T10:30:47.890 に答える
2
  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;

于 2016-11-30T15:04:10.163 に答える