STUFF在更新SQL查询中不起作用

时间:2015-04-10 10:28:56

标签: sql-server tsql

在SQL Server 2008 R2上运行此查询

update Documents
set Url = STUFF(Url, CHARINDEX('2', Url), 1, '1')
where url != '' and Url is not null

给出错误

Msg 515, Level 16, State 2, Line 1
Cannot insert the value NULL into column 'Url', table 'dbo.Documents'; column does not allow nulls. UPDATE     fails. The statement has been terminated.

请注意,选择正常

SELECT STUFF(url, CHARINDEX('2', Url), 1, '1')
FROM Documents
where url != ''

1 个答案:

答案 0 :(得分:0)

来自CHARINDEX的文档:

  

如果在 expressionToSearch 中找不到 expressionToFind ,则CHARINDEX将返回0.

来自STUFF的文档:

  

如果起始位置为0,则返回空值

也许你想添加:

Url like '%2%'

作为WHERE子句中的附加条件 1


E.g。看看这个例子:

;With Example as (
    select 'abc' as Url
)
select Url, CHARINDEX('2',Url),STUFF(Url, CHARINDEX('2', Url), 1, '1')
from Example

产生结果:

Url              
---- ----------- -------
abc  0           NULL

1 实际上,它可以单独作为此UPDATE的条件,因为它将作为副产品消除Url NULL或空的。但您可能更愿意保留其他条件,以明确表示您想要排除这些特定值。