2016-08-10 4 views
0

Использование SQL Server 2012 в рамках приложения ASP.NET WebForms, построенный в VS2012 Express, для веб ...Могу ли я повторно использовать параметр INPUT в хранимой процедуре?

В моей хранимой процедуре, у меня есть входной параметр @UID_LOGIN AS INT. Это значение может быть ZERO во время вызова.

CREATE PROCEDURE [dbo].[uspUpdateFromDetailsView] 
    @UID_CONTACT INT, 
    @UID_LOGIN  INT, 
    @UID_USER_TYPE INT, -- etc...not shown here... 

Когда это значение равно нулю, новый LOGIN создается запись и SCOPE_IDENTITY() используется для извлечения нового значения UID_LOGIN следующим образом:

-- Retain the key to the inserted-row. 
SET @UID_LOGIN = SCOPE_IDENTITY(); 

Могу ли я быть уверен, из Вашего ответа, что этот новый значение @UID_LOGIN остается локальным для хранимой процедуры и НЕ изменяет значение параметра.

Заранее спасибо ... Джон

ответ

2

Да, @UID_LOGIN останется = SCOPE_IDENTITY() в BATCH, пока вы не установите его на что-то другое. Каждый раз, когда процедура выполняется, вам нужно будет передать новый @UID_LOGIN, потому что вы не присвоили ему значение по умолчанию в своем объявлении. то есть CREATE PROCEDURE [dbo].[uspUpdateFromDetailsView] (@UID_LOGIN = NULL) AS...

Вы можете протестировать такие фрагменты.

-- Comment out the create procedure part 
--CREATE PROCEDURE [dbo].[uspUpdateFromDetailsView] 
--(@UID_CONTACT    INT, 
-- @UID_LOGIN     INT, 
-- @UID_USER_TYPE    INT 
--) 

--declare your variables 
declare @UID_CONTACT INT, @UID_LOGIN INT, @UID_USER_TYPE INT 

--set your variable 
SET @UID_LOGIN = SCOPE_IDENTITY() 

--do some stuff 
INSERT INTO TableA (LOGIN) VALUES @UID_LOGIN 

--check variable 
SELECT @UID_LOGIN 
+0

: Большое спасибо - отличное описание для ответа :-) thx ... John –

+0

Нет пота! @JohnD – scsimon

Смежные вопросы