SQL查询:仅填充空值

时间:2012-08-29 16:49:51

标签: sql sql-server

我正在尝试使用SQL Server Management Studio 2008运行以下查询。

update Schema.[ClientNew]  
set [Notes] = ([Notes]+ char(10)+(Select [Notes] from Schema.[clientOld]
where  office = 90  and ID = '123456789AM')) where  office = 90  and ID= '123456789' 

基本上尝试将来自clientOld的notes字段中的所有数据组合到clientnew中的notes字段。

这只是代码的一部分。

分手时:

 Select [Notes] from Schema.[clientOld] where  office = 90  and ID = '123456789AM'

在笔记字段中为我提供数据。

但是当我运行查询时,clientNew表上只显示{null}值。

我的查询错了?或者在某处写空值?

请指教,

2 个答案:

答案 0 :(得分:2)

如果Schema.[ClientNew]Null字段中获得[Notes],则您的更新将无效。

这是因为您无法使用Null

操作符+进行操作

示例:

这样做:

select null + 'a'

,结果为null。 因此,如果您的表ClientNew获得NULL值,那么

([Notes]+ char(10)+(Select [Notes] from Schema.[clientOld]
where  office = 90  and ID = '123456789AM'))

将返回Null

尝试添加空字符串

(ISNULL([Notes], '') + char(10)+(Select [Notes] from Schema.[clientOld]
where  office = 90  and ID = '123456789AM'))

答案 1 :(得分:0)

NULL +任何东西总是等于NULL,你需要使用COALESCE来防止NULL:

UPDATE    [Schema].ClientNew
SET              Server = COALESCE([Schema].ClientNew, '') + COALESCE([Schema].clientOld, '')
FROM         [Schema].ClientNew INNER JOIN
                      [Schema].clientOld ON [Schema].clientOld.office = [Schema].ClientNew.office AND ID = [Schema].ClientNew.ID
WHERE     (office = 90) AND (ID = '123456789AM')