Sql server 当结果为空时,是否使用大小写表达式更新表?

Sql server 当结果为空时,是否使用大小写表达式更新表?,sql-server,tsql,sql-update,case,Sql Server,Tsql,Sql Update,Case,我已经创建了一个helper临时表,用于存储查询结果。有时,此查询返回1、2或3行。如果表中有数据,我需要使用它将不同的表更新为这些值。如果根本没有结果,或者只有1或2行,我需要将该值设置为其他值 设置此查询时遇到问题 我需要它做的是,当helper表中没有数据时,将#ForExcel中的NULL值更改为空值(“”)。在我的第一个例子中,#ForExcel.ExcelRow=15和16 ColumnF都应该是“”(不为NULL) 在第二种情况下,只有#ForExcel.ExcelRow=16应该

我已经创建了一个helper临时表,用于存储查询结果。有时,此查询返回1、2或3行。如果表中有数据,我需要使用它将不同的表更新为这些值。如果根本没有结果,或者只有1或2行,我需要将该值设置为其他值

设置此查询时遇到问题

我需要它做的是,当helper表中没有数据时,将#ForExcel中的NULL值更改为空值(“”)。在我的第一个例子中,#ForExcel.ExcelRow=15和16 ColumnF都应该是“”(不为NULL)

在第二种情况下,只有#ForExcel.ExcelRow=16应该是“”(非空)

到目前为止我有

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
CREATE TABLE#ForExcel(EXCELLOW int、ColumnE varchar(max)、ColumnF varchar(max))
声明@i int=1

而@i您需要在update语句中使用join,以便按照您想要的方式工作。像这样的事情会让你找到正确的方向

UPDATE e SET 
    ColumnE = case when rh.RowNumber is null then '' else 'rpoB' end
    , ColumnF = CASE WHEN rh.RowNumber IS NULL THEN '' ELSE rh.MyDesiredValue END
FROM #ForExcel e
left join #rpoB_helper rh on rh.RowNumber = e.ExcelRow

在这里的六条update语句中,只有三条语句可以执行任何操作。第一组更新中的第一个。第二个和第三个不做任何事情,因为#rpoB_helper中没有满足where谓词的行。由于没有行符合谓词,因此更新将触发,并且您将看到0行受影响。不确定您希望在这里发生什么。也许对预期结果的解释会使这一点更加清楚。我对问题进行了编辑,使之更加清楚。当没有行满足条件时,我想将NULL更新为“这有效,除非#rpoB_helper中没有任何内容。”。有时,辅助表没有任何数据,因为插入到辅助表中的查询没有任何结果。当helper表中没有任何行时,是否有方法更新null?这将更新#ForExcel表中的任何行,即使helper表中没有行。