У меня есть этот код в задаче сценария:SSIS Script Task Debugging При проверке значения для сравнения
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 на месяц стоимости системы это дает мне ошибку сценария DTS, говорящую о том, что:
Тип значения, присвоенного переменной «Пользователь :: 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")
Просто, чтобы проверить это будет работать с простым по сравнению заявления и что это было что-то делать с кодом I был в выражении IF, поскольку я не подозревал, что это связано с переменной msg, которую я заполнял, хотя это было сообщение об ошибке.
Так что я понимаю, что это что-то делать с:
If CStr(MonthName(lastMonth.Month, False)) = CStr(Dts.Variables("MonthNameFromSQL").Value) Then
montNameFromSQL заполняется набором результатов предыдущей задачи SQL, а затем в этом сценарии я использую его, чтобы проверить против системы месяц имя. Я хочу проверить эти значения и, если совпадение, то успех и перейти на проверку возвращенных строк, и заполнить сообщение для отправки в мою задачу электронной почты.
Надеюсь, это что-то простое и свежая пара глаз может заметить!
Благодаря
Andrew
Каков тип данных Dts.Variables ("MonthNameFromSQL"). Значение? это тип объекта? Также покажите sql-скрипт, который используется в задаче sql для заполнения переменной montNameFromSQL. –
Тип данных не является строкой, а не объектом. Следующий запрос используется для получения значения monthName (псевдоним в запросе) в MonthNameFromSQL с использованием свойства набора результатов в задаче sql : выберите отдельный конвертер (varchar (12), (имя_таблицы (месяц, дата_колонка))) \t as monthName FROM dbo.table1 – Andrew
После изменения утверждения на If 1 = 1 Тогда MsgBox («Переменная названия месяца равна значению последнего месяца»), была ли ошибка осталась прежней? –