SQL Server删除多行

时间:2014-12-31 06:03:30

标签: sql sql-server database sql-delete

在SQL Server中,我有一个表CustomerAddr和一个名为Stnumber的列。我有要删除的非整数值。我想删除非整数值的行。我使用此查询显示非整数值的结果:

Select * 
From [CustomerAddr] [Stnumber] 
Where ISNUMERIC ([Stnumber]) = 0

我使用此查询:

Delete FROM CustomerAddr 
WHERE ISNUMERIC StNumber = '0';

不幸的是ISNumeric是罪魁祸首。我收到一条错误消息:

  

在预期条件的上下文中指定的非布尔类型的表达式,靠近'Stnumber'

如果我删除isnumeric,我一次只能删除一行。帮助会很棒。

4 个答案:

答案 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。这就是你在选择查询中所做的。

您需要将括号放回删除命令中。没有它,你会看到错误。