【发布时间】:2020-09-17 11:36:40
【问题描述】:
在下面的这个例子中我不能连接! 当我循环时,我得到了 2 个正确的结果。 当我连接 @MaterialCompositionEn += ', ' 它工作正常 当我尝试连接 @MaterialCompositionEn += 相同的查询以获得第二行时,我有一个空值!
DECLARE @MaterialCompositionId int = 475;
DECLARE @MaterialCompositionKey nvarchar(50) = '202071512324138';
DECLARE @Records nvarchar(250);
DECLARE @RecordProceed int;
DECLARE @MaterialCompositionEn nvarchar(500);
SET @Records = (SELECT STRING_AGG(Id, ',') FROM MaterialCompositions mc WHERE mc.MaterialCompositionId = @MaterialCompositionId)
WHILE len(@Records) > 0
BEGIN
SET @RecordProceed = CAST(LEFT(@Records,4) AS int)
if @RecordProceed > 0
BEGIN
SET @Records = REPLACE(@Records,substring(@Records, 1, 4),'')
END
if len(@Records) > 4
BEGIN
SET @Records = REPLACE(@Records,substring(@Records, 1, 1),'')
END
if len(@MaterialCompositionEn) > 0
BEGIN
SET @MaterialCompositionEn += ', '
END
PRINT 'MaterialCompositionEn1: ' + @MaterialCompositionEn
SET @MaterialCompositionEn =
(SELECT COALESCE (CAST(MaterialProportion AS nvarchar) + '% ', '') +
(SELECT mp.MaterialPrimaryEn +
COALESCE(
(SELECT ' (' + ms.MaterialSecondaryEn + ')' AS MS1 FROM dbo.MaterialSecondaries AS ms WHERE ms.Id = mc.MaterialSecondaryId)
, '')
FROM dbo.MaterialPrimaries AS mp WHERE mp.Id = mc.MaterialPrimaryId)
FROM MaterialCompositions mc WHERE mc.Id = @RecordProceed
)
PRINT 'MaterialCompositionEn2: ' + @MaterialCompositionEn
END
结果:
MaterialCompositionEn2: 20% Cashmere
MaterialCompositionEn1: 20% Cashmere,
MaterialCompositionEn2: 80% Wool
现在当我改为:
SET @MaterialCompositionEn +=
(SELECT COALESCE......
我预计 20% 羊绒,80% 羊毛 相反,我的 3 张照片为 NULL 我尝试投射但无济于事。
有什么想法吗? 提前致谢
【问题讨论】:
-
'某事' + NULL = NULL
-
您使用的是哪个 dbms? (该代码是特定于产品的。)
-
这看起来像 SQLServer,考虑
CONCAT()处理空值而不需要太多合并
标签: sql concatenation