Проблемы с обновлением SQL во время работы хранимого процесса - PullRequest
2 голосов
/ 06 мая 2011

Я реализую программное приложение, которое использует базу данных сервера SQL.Я запускаю сохраненный процесс в макросе, который я создал в своем приложении, однако я не могу получить «StartTime» (поле datetime) для обновления.Вот код:

ALTER PROCEDURE [dbo].[pAfterFirstRun] ( @scheduleDate datetime ) AS
BEGIN

    SET NOCOUNT ON;

    CREATE TABLE #VehicleId ( VehicleId INT )

    INSERT INTO #VehicleId 
       (VehicleId) 
    SELECT VehicleId 
      FROM ResourceDaily 
     WHERE WorkDay = @scheduleDate 
       AND ResourceName = 'RUN 1' 
       AND ResourceCode IN (SELECT ResourceCode 
                              FROM ResourceDailySchedule 
                             WHERE WorkDay = @scheduleDate)

    UPDATE ResourceDaily 
       SET StartTime = '1899-12-30 07:20:00.000' 
     WHERE WorkDay = @scheduleDate 
       AND ResourceName = 'RUN 2' 
       AND VehicleId IN (SELECT VehicleId 
                           FROM #VehicleId)

    UPDATE ResourceDaily 
       SET StartAddress = '568 BUCKS HILL RD', 
           StartCity = 'WATERBURY', 
           StartState = 'CT', 
           StartZipCode = '06704', 
           StartXCoord = '-73.029938', 
           StartYCoord = '41.606228' 
     WHERE WorkDay = @scheduleDate 
       AND ResourceName = 'RUN 2' 
       AND VehicleId IN (SELECT VehicleId 
                           FROM #VehicleId)

END

Я знаю, что это странный способ выполнить работу;Первоначально я не создавал временную таблицу.Все это было сделано с помощью одного оператора обновления, и я продолжал изменять его, чтобы посмотреть, смогу ли я заставить его работать.

Исходный оператор обновления включал в себя обновления StartTime, StartAddress, StartCity, StartState, StartXCoord и StartYCoord, все водин оператор, и все будет обновлено, кроме поля StartTime.

Я должен также упомянуть, что если бы мне нужно было выполнить оператор UPDATE в Management Studio и установить для @scheduleDate значение «5/2/2011», оператор обновлениябудет работать правильно ... кажется, что он не запускается в приложении с параметром @scheduleDate.

Ответы [ 3 ]

1 голос
/ 06 мая 2011

Похоже, вы вставляете в свою таблицу, где

ResourceName = 'RUN 1'

, а затем обновляете ее в зависимости от того, где

ResourceName = 'RUN 2'

Я не уверен, как выглядят ваши данные, но это может быть проблемой

0 голосов
/ 06 мая 2011

это зависит от данных, поэтому запустите процедуру вручную из SQL Server Management Studio, после внесения в нее следующих изменений:

ALTER PROCEDURE [dbo].[pAfterFirstRun] ( @scheduleDate datetime ) AS
BEGIN

    SET NOCOUNT ON;

    CREATE TABLE #VehicleId ( VehicleId INT )

    INSERT INTO #VehicleId 
       (VehicleId) 
    SELECT VehicleId 
      FROM ResourceDaily 
     WHERE WorkDay = @scheduleDate 
       AND ResourceName = 'RUN 1' 
       AND ResourceCode IN (SELECT ResourceCode 
                              FROM ResourceDailySchedule 
                             WHERE WorkDay = @scheduleDate)
--debug
SELECT '#VehicleId' AS "#VehicleId",* FROM #VehicleId 
--debug
SELECT 'UPDATE 1', AS "UPDATE 1", * FROM ResourceDaily 
     WHERE WorkDay = @scheduleDate 
       AND ResourceName = 'RUN 2' 
       AND VehicleId IN (SELECT VehicleId 
                           FROM #VehicleId)

    UPDATE ResourceDaily 
       SET StartTime = '1899-12-30 07:20:00.000' 
     WHERE WorkDay = @scheduleDate 
       AND ResourceName = 'RUN 2' 
       AND VehicleId IN (SELECT VehicleId 
                           FROM #VehicleId)

--debug
SELECT 'UPDATE 2', AS "UPDATE 2", * FROM ResourceDaily 
     WHERE WorkDay = @scheduleDate 
       AND ResourceName = 'RUN 2' 
       AND VehicleId IN (SELECT VehicleId 
                           FROM #VehicleId)


    UPDATE ResourceDaily 
       SET StartAddress = '568 BUCKS HILL RD', 
           StartCity = 'WATERBURY', 
           StartState = 'CT', 
           StartZipCode = '06704', 
           StartXCoord = '-73.029938', 
           StartYCoord = '41.606228' 
     WHERE WorkDay = @scheduleDate 
       AND ResourceName = 'RUN 2' 
       AND VehicleId IN (SELECT VehicleId 
                           FROM #VehicleId)

END

Я добавил 3 отладочных запроса, которые будут возвращать наборы результатов, которые вам нужно посмотреть и понять, прежде чем вы сможете решить эту проблему. Я не знаю ваше приложение или то, что вы пытаетесь сделать достаточно хорошо, чтобы исправить это для вас, но вам нужно увидеть, что делают ваши запросы, прежде чем вы сможете решить их. Я не удивлюсь, если все закончится тем, что #VehicleId пуст после вставки в него. Если это так, обратите внимание на время в параметре @scheduleDate и время в значениях столбца WorkDay, которые не соединяются должным образом. Посмотрите на Пол даты в SQL-сервере .

0 голосов
/ 06 мая 2011

Это столбец SmallDateTime? Если это так, минимальное значение - 1 января 1900

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...