-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 に答える