检查T-SQL脚本中的错误

时间:2017-02-24 14:55:25

标签: sql sql-server tsql

我在T-SQL中自学,所以我确信我可以在代码编写中获得效率,因此即使与此特定问题无关,也欢迎任何指针。

我在写作的夜间例行中遇到了问题。创建初始数据的数据库程序是我无法控制的,并且写得很松散,所以我的数据很糟糕,可能会不时地破坏我的脚本。我正在寻找帮助将错误检查添加到我的脚本中,所以我丢失了一条记录,而不是整个事情的爆炸。

代码如下所示:

    SELECT convert(bigint,(SUBSTRING(pin, 1, 2)+ SUBSTRING(pin, 3, 4)+ SUBSTRING(pin, 7, 5) + SUBSTRING(pin, 13, 3))) AS PARCEL, taxyear, subdivisn, township, propclass, paddress1, paddress2, pcity

    INTO [ASSESS].[dbo].[vpams_temp]

    FROM [ASSESS].[dbo].[Property]

    WHERE parcelstat='F' 

    GO

问题出现在连接发生的第一部分。我试图将此字符串(11-1111-11111.000)转换为此数字(11111111111000)。如果他们正确地输入了他们的数据,那么正确的点和正确位置的数字就会有标点符号。如果他们犯了错误,那么我最终会在错误的位置使用标点符号,并创建一个无法转换为数字的字符串。

4 个答案:

答案 0 :(得分:2)

如何简单地更换" - "和"。"用""在CONVERTBIGINT之前?

为此,您只需用

替换部分代码即可
SELECT CONVERT(BIGINT,REPLACE(REPLACE(pin,"-",""), ".","")) AS PARCEL, ...

希望它有所帮助。

答案 1 :(得分:1)

首先,我会使用replace()(两次)。其次,我会使用try_convert()

SELECT try_convert(bigint,
                   replace(replace(pin, '-', ''), '.', '')
                  ) as PARCEL,
       taxyear, subdivisn, township, propclass, paddress1, paddress2, pcity
INTO [ASSESS].[dbo].[vpams_temp]
FROM [ASSESS].[dbo].[Property]
WHERE parcelstat = 'F' ;

您可能想要检查值中是否还有其他字符:

select pin
from [ASSESS].[dbo].[Property]
where pin like '%[^-0-9.]%';

答案 2 :(得分:0)

为什么不呢:

select cast(replace(replace('11-1111-11111.000','-',''),'.','') as bigint)

答案 3 :(得分:0)

简单地说,使用下一个代码: -

declare @var varchar(100)
set @var = '11-1111-11111.000'
select convert(bigint, replace(replace(@var,'-',''),'.',''))

<强>结果: -

11111111111000