-1

我将 4 个平面苍蝇导入 4 个 sql 表。所有文件都有 77 列。导入后,我需要将所有 4 个表的空字段更新为 Null。下面是语法:

DECLARE @iCount as integer
DECLARE @sCol1 as varchar(50)

--Replace all empty fields with NULL value

--Update audWeeklycs
Set @iCount =0
While @iCount<=76
Begin
  if @iCount <=9
  set @sCol1='[Col00'+CAST(@iCount as varchar (2))+']'
  else 
  set @sCol1='[Col0'+cast(@iCount as varchar (2))+']'

  Update MHP_Analysis.dbo.audWeeklycs
  Set @sCol1= case when len(rtrim(ltrim(@sCol1)))=0 then Null else @sCol1 end
  Set @iCount=@iCount+1
End

运行此语句后,我发现空字段没有变化。想不通为什么。我也尝试了 NULLIF 函数,但没有用。

4

1 回答 1

0

您的UPDATE语句不能更新数据库中的任何内容,因为它只更新变量。让我们来看看:

Update MHP_Analysis.dbo.audWeeklycs
Set @sCol1= case when len(rtrim(ltrim(@sCol1)))=0 then Null else @sCol1 end

您使用WHILE循环的算法不是最好的解决方案,但在您的情况下,您可以使用动态 SQL 进行真正的更新。像这样的东西:

-- somewhere outside your cycle
DECLARE @SqlCmd VARCHAR(1000)

-- replace your update statement with this code
SET @SqlCmd =
    'Update MHP_Analysis.dbo.audWeeklycs
    Set ' + @sCol1 + ' = case when len(rtrim(ltrim(' + @sCol1 + ')))=0 then Null else ' + @sCol1 +  ' end'
EXEC (@SqlCmd)
于 2013-03-23T07:26:11.903 回答