T-SQL用NULL替换非空列的一部分会生成错误

时间:2012-08-06 07:21:17

标签: tsql replace null notnull

我有表变量,它的所有列都不能为null(每个列的NOT NULL定义):

DECLARE @SampleTable 
(
   ,SampleColumnID nvarchar(400) NOT NULL PRIMARY KEY
   ,SampleColumnText nvarchar(max) NOT NULL
)

我已对此变量进行了一些操作,并使用一些文本初始化“SampleColumnText”。

然后我尝试用其他功能的文本返回替换它的某些部分。会发生什么是在某些情况下函数返回NULL,所以我这个代码生成错误:

REPLACE(SampleColumnText , '{*}', @InitByFunctionText)

WHERE @InitByFunctionText这次是NULL。

那么,生成是正常错误,因为我只用NULL替换部分文本,而不是整个文本?

2 个答案:

答案 0 :(得分:2)

我最近有类似的事情,以下问题解决了这个问题:

REPLACE(SampleColumnText , '{*}', ISNULL(@InitByFunctionText, ''))

答案 1 :(得分:2)

这是预期的行为。 REPLACE

  

如果任何一个参数为NULL,则返回NULL

如果您想用空字符串替换它( NULL相同),您可以使用COALESCE

REPLACE(SampleColumnText , '{*}', COALESCE(@InitByFunctionText,''))