在SQL Server中,我有一个表CustomerAddr
和一个名为Stnumber
的列。我有要删除的非整数值。我想删除非整数值的行。我使用此查询显示非整数值的结果:
Select *
From [CustomerAddr] [Stnumber]
Where ISNUMERIC ([Stnumber]) = 0
我使用此查询:
Delete FROM CustomerAddr
WHERE ISNUMERIC StNumber = '0';
不幸的是ISNumeric
是罪魁祸首。我收到一条错误消息:
在预期条件的上下文中指定的非布尔类型的表达式,靠近'Stnumber'
如果我删除isnumeric
,我一次只能删除一行。帮助会很棒。
答案 0 :(得分:3)
需要重写where子句。
在哪里,ISNUMERIC StNumber =' 0&#39 ;;
ISNUMERIC
是一个内置函数。 StNumber
是您要与“0'”进行比较的列。这些不兼容。
你可以这样写:
WHERE ISNUMERIC (StNumber) <> 1;
如果您的意思是非数字,那么我会使用上述内容。
但坚持下去!以上将返回非小数,货币数据类型等的行.ISNUMERIC可能不是您想要的。你这样说:
我想删除非整数值的行。
如果是整数测试,ISNUMERIC
是不对的。 ISNUMERIC will return a 1 (or a true)
表示可能是小数的值。小数不是整数。
如果你的意思是整数,这可能会给你你想要的东西:
WHERE StNumber NOT LIKE '%[^0-9]%'
答案 1 :(得分:1)
试试这个
删除前使用选择确认记录
select * From [CustomerAddr] Where ISNUMERIC ([Stnumber]) = 0
然后使用此
delete From [CustomerAddr] Where ISNUMERIC ([Stnumber]) = 0
答案 2 :(得分:1)
或者,您可以使用with子句
With TempAlias as (
Select * From [CustomerAddr] [Stnumber] Where ISNUMERIC ([Stnumber]) = 0)
delete from TempAlias
答案 3 :(得分:0)
您的查询不等于您的删除; IsNumeric是一个函数,根据其参数是否为数字返回0或1。这就是你在选择查询中所做的。
您需要将括号放回删除命令中。没有它,你会看到错误。