SQL中

时间:2015-10-06 19:34:34

标签: sql sql-server sql-server-2008

我使用更新语句将任何Null或空字符串值替换为" No Cost Center"。我导入到表中的数据有很多空白/空字符串值,当我运行下面的代码时,它会影响0行:

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 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 个答案:

答案 0 :(得分:1)

A"空白" string可以是空白字符的非空字符串,可能不容易在视觉上区分空字符串。根据您的查看方式,也许不是来自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()将会产生一个空字符串。

答案 1 :(得分:0)

您可以在列中尝试LTRIMRTRIM并检查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

答案 2 :(得分: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

答案 3 :(得分:0)

您需要检查标签和换行等不可打印的字符