У меня установлен 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, и процедура работает как обычно, поэтому я не думаю, что это разрешения.
Надеюсь, мое объяснение и вопрос достаточно ясны. Буду признателен за любые мысли или предложения относительно того, что я делаю неправильно.
TRUNCATE TABLE dbo.PreviousTableA
, а неdelete from dbo.PreviousTableA where scheduleID > -1
, предполагая, что нет записей, где scheduleID ‹= -1. - person ig0774   schedule 24.11.2011