SQL Server удалить несколько строк

В SQL Server у меня есть таблица CustomerAddr и столбец с именем Stnumber. У меня есть нецелочисленные значения, которые я хочу удалить. Я хотел бы удалить строки нецелочисленных значений. Я использую этот запрос, который показывает результаты нецелочисленных значений:

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

Я использую этот запрос:

Delete FROM CustomerAddr 
WHERE ISNUMERIC StNumber = '0';

К сожалению, виноват ISNumeric. Я получаю сообщение об ошибке:

Выражение нелогического типа, указанное в контексте, где ожидается условие, рядом с «Stnumber».

Если я удалю isnumeric, я смогу удалить только одну строку за раз. Помощь была бы отличной.


person tiburon1    schedule 31.12.2014    source источник


Ответы (4)


попробуй это

Перед удалением подтверждает записи с помощью Select

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

затем используйте это

delete From [CustomerAddr] Where ISNUMERIC ([Stnumber]) = 0
person Ganesh_Devlekar    schedule 31.12.2014

Предложение 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]%'
person NewYorkSup    schedule 31.12.2014

В качестве альтернативы вы можете использовать предложение with

With TempAlias as (
   Select * From [CustomerAddr] [Stnumber] Where ISNUMERIC ([Stnumber]) = 0)
delete from TempAlias
person mayowa ogundele    schedule 31.12.2014

Ваш запрос не равен вашему удалению; IsNumeric — это функция, которая возвращает 0 или 1 в зависимости от того, является ли ее аргумент числовым. Это то, что вы делаете в своем запросе выбора.

Вам нужно вернуть скобки в команду удаления. Без него вы получите ошибку, как видите.

person Andrew Barber    schedule 31.12.2014