Sql server 2008 r2 将空字段更新为Null,但由于Null或len(trim())=0而失败
我将4个平面苍蝇导入4个sql表。所有文件都有77列。导入后,我需要将所有4个表的空字段更新为Null。以下是语法:Sql server 2008 r2 将空字段更新为Null,但由于Null或len(trim())=0而失败,sql-server-2008-r2,Sql Server 2008 R2,我将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
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
将@iCount声明为整数
将@sCol1声明为varchar(50)
--用空值替换所有空字段
--更新audWeeklycs
设置@iCount=0
而@iCount您的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)
“空”是什么意思?空的,非空的空字符串,还有别的吗?明白了。非常感谢你。