0

スクリプト タスクに次のコードがあります。

Public Sub Main()
    '
    ' Add your code here
    '
    Dim MonthFromSQL As String
    Dim lastMonth As New Date(DateTime.Today.Year, DateTime.Today.Month - 1, 1)
    Dim rcnt As Integer
    Dim msg As String
    'MsgBox("Month name from SQL is " & CStr(Dts.Variables("MonthNameFromSQL").Value))
    rcnt = CInt(Dts.Variables("RowCount").Value)
    If rcnt = 0 Then
            msg = "Job returned 0 rows for month " & CStr(MonthName(lastMonth.Month, False)) & " - check with database operator that previous month's data has been loaded into the database."
     Else
            msg = "Job returned " & rcnt & " rows - Job Finished"
     End If
    'Pass message variable value out to be used in message 
    Dts.Variables("EmailMessage").Value = msg
    Dts.TaskResult = Dts.Results.Success
End Sub

IF ステートメントを以下のように変更して、SQL DB からの月の値をシステムの月の値と照合できるようにすると、次のような DTS スクリプト エラーが表示されます。

変数 "User::EmailMessage" に割り当てられている値の型が、現在の変数の型と異なります。実行中に変数の型を変更することはできません。Object 型の変数を除いて、変数の型は厳密です。

'First check month name from sql match system last month name
    If CStr(MonthName(lastMonth.Month, False)) = CStr(Dts.Variables("MonthNameFromSQL").Value) Then
        MsgBox("Month name variable equals last month value")
        If rcnt = 0 Then
            msg = "Job returned 0 rows for month " & CStr(MonthName(lastMonth.Month, False)) & " - check with outpatient database operator that previous month's data has been loaded into the database."
        Else
            msg = "Job returned " & rcnt & " rows - Job Finished"
        End If
    Else
    'Put in code to handle if month values do not match
    End If

私は置き換えました:

If CStr(MonthName(lastMonth.Month, False)) = CStr(Dts.Variables("MonthNameFromSQL").Value) Then
        MsgBox("Month name variable equals last month value")

と:

If 1=1 Then
MsgBox("Month name variable equals last month value")

単純な比較ステートメントで動作することを確認するだけで、IF ステートメントに含まれていたコードと関係があることを確認できました。エラーメッセージ。

だから私はそれが何かに関係していることを理解しています:

If CStr(MonthName(lastMonth.Month, False)) = CStr(Dts.Variables("MonthNameFromSQL").Value) Then

montNameFromSQL には、前の SQL タスクの結果セットが取り込まれます。このスクリプトでは、それを使用してシステムの月名をチェックしています。これらの値を確認し、一致する場合は成功し、返された行を確認して、メール タスクに送信するメッセージを入力します。

願わくば、それがシンプルで新鮮な目で見分けられるものであることを願っています!

ありがとう

アンドリュー

4

2 に答える 2