У меня настроен MSSQL Server 2008 (Express).
В моей базе данных есть набор таблиц и хранимая процедура.
Чего я хочу добиться, это получить любые изменения, которые были внесены в существующую таблицу, и вернуть их в конце процедуры. Хранимая процедура, которую я создал, прекрасно работает, когда я запускаю ее локально в MSSQL Management Studio.
Однако, когда я вызываю процедуру через соединение JDBC, некоторые части процедуры, кажется, не завершены.
Резюме того, что я пытаюсь сделать, выглядит следующим образом:
1) Put a snapshot of the data contained in CurrentTableA into #CurrentShotA (temporary table)
2) Compare #CurrentShotA with PreviousTableA
3) Insert differences into #TempTableB
(this equates to new rows or altered rows in #CurrentShotA)
4) Empty PreviousTableA
5) Insert contents of #CurrentShotA into PreviousTableA
6) Select * from #TempTableB (return all new rows and changes)
Шаг 6 возвращает данные правильно при первом вызове через JDBC.
Когда процедура вызывается во второй и последующие моменты времени, становится ясно, что шаг 5 не выполнен должным образом. PreviousTableA всегда пуст, когда он должен содержать снимок старых данных.
Вопрос в том, почему процедура работает правильно, когда вызывается в MSSQL Management studio, а не когда я вызываю ее через JDBC?
CREATE PROCEDURE [dbo].[getUpdatedSchedules]
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Check of the temporary table exists, delete if it does
IF OBJECT_ID('#TempTableB','U')IS NOT NULL
begin
drop table #TempTableB
end
-- Force the creation of the temporary tables quickly
select * into #TempTableB from dbo.CurrentTableA where 1=0
select * into #CurrentShotA from dbo.CurrentTableA where 1=0
-- Get the differences between schedules and put into #TempTableB
insert #CurrentShotA select * from dbo.CurrentTableA
insert #TempTableB select * from #CurrentShotA
except select * from dbo.PreviousTableA
TRUNCATE TABLE dbo.PreviousTableA
insert dbo.PreviousTableA select * from #CurrentShotA
select * from #TempTableB
END
GO
Я достаточно плохо знаком с хранимыми процедурами и конфигурацией MSSQL, поэтому я подумал, что это может быть проблема с разрешениями. Я вхожу в MSSQL Studio с использованием аутентификации SQL, которая не связана с учетной записью Windows, и процедура выполняется как обычно, поэтому я не думаю, что это разрешения.
Надеюсь, мое объяснение и вопрос достаточно ясны. Буду признателен за любые мысли или предложения относительно того, что я делаю неправильно.