Я работаю над этим неординарным проектом данных (C # / LINQ / MS SQL).Я получаю очень плохо отформатированный набор данных и работаю над созданием значимых отчетов с данными.Для одного из отчетов («SwitchFlow») я создал Stored Proc под названием «SwitchFlowGenerate».Требуется два параметра: дата отчета и компания происхождения.
В самом конце сохраненного процесса я в конечном итоге использовал курсор (uck) для циклического перемещения по данным, чтобы сгенерировать поле подсчета клиентов.значение.
Когда я запускаю сохраненный процесс в Management Studio, он работает на 100%.Когда у меня есть сохраненный процесс для моего LINQ-to-SQL и он вызывается из консольного приложения Visual Studio C #, он не работает полностью ...
Из моего приложения заполняется сохраненный процесс "SwitchFlowGenerate"таблица отчета, как и должно быть, не возвращает кодов ошибок (в отладке или в процессе производства), но, похоже, она не выполняет часть курсора сохраненного процесса (оставляя поле подсчета клиентов равным нулю).
Я вызываюхранимый процесс из MS SQL Management Studio просто так:
exec switchflowgenerate '03 -13-2012 ',' ace '
из C # / LINQ Я называю это какthis:
db.SwitchFlowGenerate (DateTime.Now, ldc);
(примечание. Теперь в MSMS то же самое, что и выше)
Курсорная часть кода выглядит следующим образом:
** - Обновите столбец «Счетчик клиентов», чтобы отразить движение переключателя аккаунта
DECLARE @Adjust INT
SET @Adjust = 0
DECLARE @cc nvarchar(100)
DECLARE @stat nvarchar(100)
DECLARE SFC CURSOR FOR SELECT CustomerCount, [Status] FROM SwitchFlow WHERE ReportDate = @rptDate AND LDC = @ldc FOR UPDATE
OPEN SFC
FETCH SFC INTO @cc, @stat
WHILE (@@FETCH_STATUS = 0)
BEGIN
IF @stat = 'Dropped' BEGIN SET @Adjust = -1 END
IF @stat = 'Start' BEGIN SET @Adjust = 1 END
IF @stat = 'In Queue - To Start' BEGIN SET @Adjust = 1 END
IF @stat = 'In Queue - To Drop' BEGIN SET @Adjust = -1 END
IF @stat = 'Reenrolling' BEGIN SET @Adjust = 1 END
IF @stat = '#### SAME DAY ####' BEGIN SET @Adjust = 0 END
SET @@StartingTotal = @@StartingTotal + @Adjust
UPDATE [SwitchFlow] SET CustomerCount = @@StartingTotal WHERE CURRENT OF SFC
FETCH SFC INTO @cc, @stat
END
CLOSE SFC
DEALLOCATE SFC**
Linq generates:
Generating Data For: ACE on 3/13/2012
EXEC @RETURN_VALUE = [dbo].[SwitchFlowGenerate] @rptDate = @p0, @ldc = @p1
-- @p0: Input DateTime (Size = -1; Prec = 0; Scale = 0) [3/13/2012 9:56:59 AM]
-- @p1: Input NVarChar (Size = 4000; Prec = 0; Scale = 0) [ACE]
-- @RETURN_VALUE: Output Int (Size = -1; Prec = 0; Scale = 0) [Null]
-- Context: SqlProvider(Sql2008) Model: AttributedMetaModel Build: 4.0.30319.1
Любая помощь или понимание будут высоко оценены, особенно если кто-тоимеет представление о том, как этого добиться без курсора.
Спасибо !!TK