1

SQL Server 2005 を使用してデータベース フィールドを から に変更する際に問題がありますdatetimeinteger

私のコードは...

alter table overtime alter column adate numeric(5)

このクエリを使用しているときに、このようなエラーが発生します

データ型 datetime からデータ型数値、テーブル 'DaiichiPayroll.dbo.Overtime'、列 'adate' への暗黙的な変換は許可されていません。CONVERT 関数を使用して、このクエリを実行します。

解決策はありますか?

4

2 に答える 2

6

サーバーは、dateTime 列を暗黙的に数値に変換できません。解決策の1つは-

  1. 数値型の新しい列を作成する
  2. 追加のクエリを記述してデータを dateTime 列から数値列に変換し、次に
  3. dateTime 列を削除します
  4. 新しく追加された列の名前を、削除された dateTime 列と同じ名前に変更します。
于 2010-12-03T13:10:26.387 に答える
2

Sachinの答えはおそらく最良の解決策ですが、クラスター化インデックスを再構築するまで、テーブルは削除された列のストレージスペースを引き続き使用することに注意する必要があります。

そのため、たとえば、8バイトの列をconvert8バイトの列に変更するために実行できる明示的な構文があれば、非常に便利ですが、AFAIKは存在しません。datetimebigint

別の方法は、SSMSを使用してスクリプトを生成することです。これにより、テーブル全体を再構築するスクリプトが生成されます。ただし、テーブルが大きい場合やNCIが多い場合は、このブロッキングオーバーヘッドは許容できない可能性があります。

于 2010-12-03T16:35:35.290 に答える