2

次のコード行を使用しvarchar(50)て変換したい列があります。int

ALTER TABLE [Table].[dbo].[example]
ALTER COLUMN XYZ int

列の内容XYZを調べたところ、9999 を超えない整数のように見えます。

私は Visual Studio のデバッガーに精通しており、コードをステップ実行する方法を知っています。ただし、SQL Server Mgmt. Studio デバッガー、このエラーをスローするフィールドに焦点を合わせて修正する方法がわかりません:

varchar 値 'XYZ' をデータ型 int に変換するときに変換に失敗しました。

クエリは約 1 分間実行され、動作しているように見えますが、その後上記のエラーが表示されます。

4

3 に答える 3

4

正規表現を使用して、正しく変換されないフィールドを特定できます。

SELECT * 
FROM example 
WHERE xyz LIKE '%[^0-9]%'

返されるレコードは、テーブルを ALTER したときに正しくキャストされないレコードです。varchar フィールドに格納された小数も int にキャストされません。

検討:

select CAST('1.1' as int)-- これはエラーを返します。

幸運を。

于 2013-02-04T17:33:01.640 に答える
1

列に値IsNumeric()がない行を見つけるために使用します。int

select *
from example
where isnumeric(xyz) <> 1

デモで SQL Fiddle を参照してください

CASE次のステートメントを使用することもできます。

select 
  case 
    when isnumeric(xyz) <> 1 
    then xyz end
from example
where isnumeric(xyz) <> 1

デモで SQL Fiddle を参照してください

値ではないピリオドを含む可能性のあるレコードを検索する場合はint、次を使用できます。

select  xyz
from example
where isnumeric(xyz) <> 1
  or charindex('.', xyz) <> 0

SQL Fiddle with Demoを参照してください。これらのレコードを特定したら、次の手順をどのように進めるかを決定できます。ALTER TABLE

于 2013-02-04T17:33:25.313 に答える