SQL Server中带条件使用CONCAT_WS创建视图的语法错误解决
修正SQL Server视图创建语句中的语法错误
错误原因分析
原代码的核心问题在于CASE表达式的THEN分支直接返回了两个列名(Director,ACCMGR),SQL Server不允许CASE表达式返回多个值,必须返回单个标量值。需要将这两个列先通过CONCAT_WS拼接成一个字符串,再作为CASE的返回结果。
修正后的代码
CREATE VIEW WorkflowRequestViews AS SELECT ApplicationNo, DescriptionNo, BelongSite as Site, cast(FaxCode as nvarchar(50)) as FaxCode, cast(MainApproval as nvarchar(100)) as MainApproval, TotalStep, Process, UrgencyLevel, Complete, CAST(CONCAT_WS(',', SectionMGR, DepartmentMGR, FactoryManager, CASE WHEN BelongSite = 'FVB' THEN CONCAT_WS(',', Director, ACCMGR) ELSE ACCPIC2 END) as nvarchar(255)) as TotalApproval FROM BusinessTrips
说明
- 当
BelongSite等于'FVB'时,先将Director和ACCMGR用逗号拼接成一个字符串,再加入到整体的CONCAT_WS拼接序列中; CONCAT_WS函数会自动忽略NULL值,避免出现多余的逗号;- 最终将拼接结果转为
nvarchar(255)类型,保证数据类型一致性。
内容的提问来源于stack exchange,提问作者Phan Hien Vo
相关产品推荐
相关产品推荐

