2012-08-06 20 views
0

我有表变量及其所有的列不能为空(每个NOT NULL定义):T-SQL替换部件产生错误

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

我做了一些操作与这个变量并用一些文本初始化“SampleColumnText”。

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

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

WHERE @InitByFunctionText为NULL这个时候。

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

回答

2

这是正常现象。 REPLACE

Returns NULL if any one of the arguments is NULL .

如果你想用一个空字符串替换它(这是一样NULL),你可以使用COALESCE

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

我最近也有类似的事情,下面有解决此问题:

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