我有一个查询,我用它来在新数据库中为正确的广告获取正确的类别,但是一些受影响的行可能有多个类别,而有些可能没有,研究给了我使用'的信息' table.column + your_data',似乎这带来了副作用,因为它不会更新NULL列,即使它表示正确的行数已经生效..
SQL:
MERGE INTO sites.dbo.ads
USING (
SELECT e.name
FROM Database1.dbo.education AS e
INNER JOIN releducationcategory AS re ON e.educationid = re.educationid
INNER JOIN category AS c ON re.categoryid = c.categoryid
INNER JOIN string AS s ON c.categoryid = s.identifier
WHERE (s.string = 'Biologi, Fysikk & Kjemi') AND (e.site = 'sd')
) AS source
ON Database2.dbo.ads.name COLLATE Finnish_Swedish_CI_AS = source.name COLLATE Finnish_Swedish_CI_AS
WHEN MATCHED THEN
UPDATE
SET sites.dbo.ads.category = ', biologi-fysikk-kjemi';
当列为NULL时,该更新运行正常,但是当已经有值时,它只会覆盖..当我将其更改为下面时:
SET sites.dbo.ads.category = sites.dbo.ads.category + ', biologi-fysikk-kjemi';
它只是更新没有值为NULL的行..但它确实表示相同数量的行受到影响..怎么办?我应该制作案例吗?
答案 0 :(得分:2)
存储逗号分隔值几乎总是一个坏主意,但如果你坚持这样做,这应该有效:
SET sites.dbo.ads.category =
COALESCE(sites.dbo.ads.category + ', ','')
+ 'biologi-fysikk-kjemi';
这也可以避免让第一项(从NULL
切换到非NULL
)从逗号开始。
您看到此行为的原因是,根据ANSI标准。 NULL
+ string = NULL
。你可以关闭它,但不建议:
控制是否将连接结果视为空值或空字符串值。
重要强>
在SQL Server的未来版本中,
CONCAT_NULL_YIELDS_NULL
始终为ON
,任何明确将选项设置为OFF
的应用程序都将生成错误。避免在新的开发工作中使用此功能,并计划修改当前使用此功能的应用程序。