Показывает ident_current ("tbluser"), но не в состоянии видеть текущие данные id'd - PullRequest
0 голосов
/ 17 декабря 2009

Я использую SQL Server 2008, который связывается с веб-службой Java, которая связывается с приложением asp.net. Я написал хранимую процедуру следующим образом:

create procedure abc(@intA int,@intB int,@intOutputParameter int output)
as
  begin 
     insert into tbluser(A,B) values (@intA,@intB) 
       /*where B is foregin key */
      set @intOutputParameter  = IDENT_CURRENT ('tbluser')

end

             /*where B is foregin key */

- теперь, когда я передаю B, которого нет в главной таблице, он выдает мне ошибку (в SQL Server 2008), что, безусловно, хорошо и принято Но в веб-методе java мой sp выполняется, и мой оператор вставки не выполняется, а непосредственно выполняется оператор после вставки (identity_current ("Tbluser")) ... ... почему это так

Если вам нужно больше объяснений, пожалуйста, попросите об этом ...

1 Ответ

1 голос
/ 17 декабря 2009

а) Ваш параметр @intOutputParameter не объявлен как выходной; Применение:

CREATE PROCEDURE abc (
     @intA int
    ,@intB int
    ,@intOutputParameter int OUTPUT
    )
AS 

б) Вы уверены, что в таблице tbluser есть что-то вроде id int IDENTITY(1,1)?

в) Что с begin end?

UPDATE :

Вы можете решить эту проблему, используя try-catch внутри процедуры, например:

ALTER PROCEDURE abc (
     @intA int
    ,@intB int
    ,@intOutputParameter int OUTPUT
    )
AS 
    BEGIN
        SET NOCOUNT ON
        BEGIN TRY
            /*where B is foregin key */
            INSERT  INTO tbluser ( A, B ) VALUES  ( @intA, @intB ) 
            SET @intOutputParameter = IDENT_CURRENT('tbluser')
        END TRY
        BEGIN CATCH
            SET @intOutputParameter = -1
        END CATCH   
    END

Это вернет -1 в случае ошибки, поэтому, если ваши идентификаторы таблицы> 1, приложение Java может различить успешную вставку и ошибку.

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