【问题标题】:SQL Server delete multiple rowsSQL Server 删除多行
【发布时间】:2014-12-31 06:03:29
【问题描述】:

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

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

我使用这个查询:

Delete FROM CustomerAddr 
WHERE ISNUMERIC StNumber = '0';

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

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

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

【问题讨论】:

    标签: sql sql-server database sql-delete


    【解决方案1】:

    where 子句需要重写。

    WHERE ISNUMERIC StNumber = '0';

    ISNUMERIC 是一个内置函数。 StNumber 是您要与“0”进行比较的列。这些不兼容。

    你可以这样写:

    WHERE ISNUMERIC (StNumber) <> 1;
    

    如果你的意思是非数字,那么我会使用上面的。

    但坚持住!以上将返回不是小数、货币数据类型等的行。ISNUMERIC 可能不是您想要的。你这样说:

    我想删除非整数值的行。

    如果是整数测试,ISNUMERIC 是不对的。 ISNUMERIC will return a 1 (or a true) 表示可能是小数的值。小数不是整数。

    如果你的意思是整数,这可能会给你你想要的:

    WHERE StNumber NOT LIKE '%[^0-9]%'
    

    【讨论】:

      【解决方案2】:

      试试这个

      在删除之前使用选择确认记录

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

      那就用这个

      delete From [CustomerAddr] Where ISNUMERIC ([Stnumber]) = 0
      

      【讨论】:

        【解决方案3】:

        或者,您可以使用 with 子句

        With TempAlias as (
           Select * From [CustomerAddr] [Stnumber] Where ISNUMERIC ([Stnumber]) = 0)
        delete from TempAlias
        

        【讨论】:

          【解决方案4】:

          您的查询不等于您的删除; IsNumeric 是一个根据其参数是否为数字返回 0 或 1 的函数。这就是您在选择查询中所做的。

          您需要将括号放回删除命令中。如您所见,没有它,您会收到错误。

          【讨论】:

            猜你喜欢
            • 2023-03-25
            • 2023-03-04
            • 1970-01-01
            • 1970-01-01
            • 2019-12-04
            • 2017-11-16
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多