2015-10-06 2 views
-1

Я использую инструкцию для обновления, чтобы заменить любые значения Null или empty string «No Cost Center». Данные, которые я импортировал в таблице имеет множество значений пустой/пустой строки и когда я запускаю код, приведенный ниже, это влияет на 0 строк:Проблемы с пустым строковым значением в SQL

Update [dbo].[Import_tbl_Inventory] Set [dbo].[Import_tbl_Inventory].[User Defined Label 4] = 'No Cost Center' 
    Where [dbo].[Import_tbl_Inventory].[User Defined Label 4] is Null or [dbo].[Import_tbl_Inventory].[User Defined Label 4] = '' 

есть нечто другое, чем NULL и пустых строковых значений, которые мне нужно проверить?

EDIT: Последующий обзор, я решил щелкнуть правой кнопкой мыши по таблице и выбрать Edit top Rows. Здесь я обнаружил, что каждая строка в столбце User Defined Label 4 фактически содержит пробелы. Я смог удалить пробелы из первых двух строк вручную, но после всех строк после этого дайте мне сообщение: Data in row was not committed. The row values updated or deleted either do not make to the row unique or they alter multiple rows

Я изменяю только одну строку за раз, и нет причин, по которым это должно иметь что-то сделать ряд уникальным. Теперь уверен, что здесь происходит.

+4

Мы не можем ответить на этот вопрос. Мы не знаем ваших данных. – sstan

+0

Соответствует ли оператор 'SELECT' только для любых строк? –

+0

Ваш запрос выглядит нормально, но обратите внимание, что он не будет влиять на строки, где столбец '[User Defined Label 4]' содержит строку из одного или нескольких символов пробела. - такие строки не равны нулю и не равны пустой строке. Возможно, это то, что у вас есть на самом деле. –

ответ

0

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

0

вы можете попробовать LTRIM и RTRIM в вашей колонке и Проверяй LEN

Update [dbo].[Import_tbl_Inventory] Set 
[dbo].[Import_tbl_Inventory].[User Defined Label 4] = 'No Cost Center' 
Where 
LEN(RTRIM(LTRIM(ISNULL([dbo].[Import_tbl_Inventory].[User Defined Label 4],''))))=0 

Вы можете использовать REPLACE

Update [dbo].[Import_tbl_Inventory] Set 
    [dbo].[Import_tbl_Inventory].[User Defined Label 4] = 'No Cost Center' 
    Where 
    LEN(REPLACE(ISNULL([dbo].[Import_tbl_Inventory].[User Defined Label 4],''),' ',''))=0 
+0

Не нужно ЗАМЕНИТЬ. Функция LEN обрезает все конечные пробелы перед подсчетом. – domenicr

+0

спасибо, спасибо за предложение. @domenicr –

+0

Это все равно приводит к повреждению 0 строк. – Jcmoney1010

1

А «пустой» строка может быть непустая строка из пробельных символов, которые может быть нелегко отличить визуально от пустой строки. В зависимости от того, как вы его просматриваете, возможно, не от NULL. Чтобы включить строки, имеющие такие значения в вашем обновлении, вы можете обрезать их перед сравнением с пустой строкой:

Update [dbo].[Import_tbl_Inventory] 
Set [dbo].[Import_tbl_Inventory].[User Defined Label 4] = 'No Cost Center' 
Where [dbo].[Import_tbl_Inventory].[User Defined Label 4] is Null 
    or RTRIM([dbo].[Import_tbl_Inventory].[User Defined Label 4]) = '' 

Вы можете использовать LTRIM() вместо вы предпочитаете, но вам не нужно и потому, что если строка содержит только пробел, а затем передать его либо LTRIM(), либо RTRIM() приведет к пустой строке.

+0

Хммм, попробовав все предложения, включая этот, я все еще получаю ту же проблему. – Jcmoney1010

+0

@ Jcmoney1010, тогда вам придется представить некоторые фактические данные, которые показывают проблему. –

0

Немного чище или без

Update [dbo].[Import_tbl_Inventory] Set [dbo].[Import_tbl_Inventory].[User Defined Label 4] = 'No Cost Center' 
    Where len(isNull([dbo].[Import_tbl_Inventory].[User Defined Label 4], '')) = 0 
+0

Это по-прежнему приводит к тому же вопросу – Jcmoney1010

Смежные вопросы