【发布时间】:2020-02-20 01:04:21
【问题描述】:
我创建了一个帮助临时表来存储查询结果。有时,此查询会返回 1、2 或 3 行。如果表中有数据,我需要使用它来将不同的表更新为这些值。如果根本没有结果或只有 1 或 2 行,我需要将值设置为其他值。
我无法设置此查询。
当辅助表中没有数据时,我需要它做的是将#ForExcel 中的 NULL 更改为空白值 ('')。在我的第一种情况下,#ForExcel.ExcelRow=15 和 16 ColumnF 都应该是 ''(不是 NULL)。
在我的第二种情况下,只有 #ForExcel.ExcelRow=16 应该是 ''(不是 NULL)
目前为止
CREATE TABLE #ForExcel (ExcelRow int, ColumnE varchar(max), ColumnF varchar(max))
DECLARE @i int=1
WHILE @i <=16
BEGIN
INSERT INTO #ForExcel VALUES (@i, NULL, NULL)
SELECT @i=@i+1
END
CREATE TABLE #rpoB_helper (RowNumber int, MyDesiredValue varchar(max))
INSERT INTO #rpoB_helper VALUES (1, 'MyValue')
UPDATE #ForExcel SET ColumnE='rpoB', ColumnF=(CASE WHEN MyDesiredValue IS NULL THEN 'NA' ELSE MyDesiredValue END) FROM #rpoB_helper rh WHERE RowNumber=1 AND ExcelRow=14
UPDATE #ForExcel SET ColumnE='', ColumnF=(CASE WHEN MyDesiredValue IS NULL THEN '' ELSE MyDesiredValue END) FROM #rpoB_helper rh WHERE RowNumber=2 AND ExcelRow=15
UPDATE #ForExcel SET ColumnE='', ColumnF=(CASE WHEN MyDesiredValue IS NULL THEN '' ELSE MyDesiredValue END) FROM #rpoB_helper rh WHERE RowNumber=3 AND ExcelRow=16
SELECT * FROM #ForExcel
--now add a row to see with two rows
INSERT INTO #rpoB_helper VALUES (2, 'AnotherValue')
UPDATE #ForExcel SET ColumnE='rpoB', ColumnF=(CASE WHEN MyDesiredValue IS NULL THEN 'NA' ELSE MyDesiredValue END) FROM #rpoB_helper rh WHERE RowNumber=1 AND ExcelRow=14
UPDATE #ForExcel SET ColumnE='', ColumnF=(CASE WHEN MyDesiredValue IS NULL THEN '' ELSE MyDesiredValue END) FROM #rpoB_helper rh WHERE RowNumber=2 AND ExcelRow=15
UPDATE #ForExcel SET ColumnE='', ColumnF=(CASE WHEN MyDesiredValue IS NULL THEN '' ELSE MyDesiredValue END) FROM #rpoB_helper rh WHERE RowNumber=3 AND ExcelRow=16
SELECT * FROM #ForExcel
【问题讨论】:
-
这里的六个更新语句中只有三个会做任何事情。第一组更新中的第一个。第二个和第三个不做任何事情,因为 #rpoB_helper 中没有满足 where 谓词的行。由于没有行满足谓词更新触发,您会看到 0 行受到影响。
-
不太确定您期望在这里发生什么。也许对预期结果的解释会使这一点更清楚。
-
我将问题编辑得更清楚。当没有行满足条件时,我想将 NULL 更新为 ''
标签: sql-server tsql sql-update case