使用ISNULL插入时SQL Server引发错误

时间:2018-09-13 06:53:25

标签: sql sql-server isnull nvarchar

我有这个查询

INSERT INTO dbo.finaltable (qty)
SELECT REPLACE(REPLACE(ISNULL(table1.[qty], '0'), CHAR(13), ''), CHAR(10), 
'') as qty FROM dbo.sometable as table1
dbo.finaltable的

qty列的类型为小数(18,4)

当我运行它时,它将引发错误

Arithmetic overflow error converting nvarchar to data type numeric.

但是当我简单地跑步

SELECT REPLACE(REPLACE(ISNULL(table1.[qty], '0'), CHAR(13), ''), CHAR(10), 
'') as qty FROM dbo.sometable as table1

运行正常。 table1.qty中有NULL值,并且NULL值被替换为'0'。如果我将它与INSERT一起使用,则ISNULL似乎不起作用。这是什么问题?

编辑: 对于错误与ISNULL有关,我深表歉意。我现在了解到,这与语言环境有关。这个问题应该关闭。

4 个答案:

答案 0 :(得分:0)

看来您的数据类型不是qty列的数字,因此最好将其更改为数字,然后仅使用以下查询

INSERT INTO dbo.finaltable (qty)
SELECT coalesce(table1.[qty], 0) from FROM dbo.sometable as table1

答案 1 :(得分:0)

我认为您需要检查table1.qty的内容,以了解为什么它不能转换为数字数据格式。我怀疑您需要删除其他一些非数字字符。我首先要做这样的事情,以确定发生了什么;如果try_cast无法将字段转换为数字格式,它将返回null值,这使您可以检查任何有问题的记录。

然后,您可以采用此逻辑并将其用作过滤掉所有不兼容的qty值的方法,从而使您能够快速完成容易完成的插入操作,并让您修复那些不在其中的插入值和平。

  SELECT 
  REPLACE(REPLACE(ISNULL(table1.[qty], '0'), CHAR(13), ''), CHAR(10), '') as replaced_values 
  , table1.qty  
  FROM table1
  WHERE
  try_cast(REPLACE(REPLACE(ISNULL(table1.[qty], '0'), CHAR(13), ''), CHAR(10)), '') as numeric(18,4))
  is null

答案 2 :(得分:-1)

尝试一下:

INSERT INTO dbo.finaltable (qty)
SELECT  ISNULL(table1.[qty], 0) as qty FROM dbo.sometable as table1

答案 3 :(得分:-1)

  

运行正常。 table1.qty中有NULL值,并且NULL值被替换为'0'。如果我将它与INSERT一起使用,则ISNULL似乎不起作用。这是什么问题?

在您的发言中,我想说一句,在select语句convert()上,replace(replace(isnull(..)..)..)的结果。如果抛出错误,那么您将假定该错误在INSERT

期间出现
SELECT 
convert(
 decimal(18, 4)
 , REPLACE(REPLACE(ISNULL(table1.[qty], '0'), CHAR(13), ''), CHAR(10), 
   '') 
) as qty 
FROM dbo.sometable as table1

我认为,我告诉了我的想法,您会明白的。