我可以在存储过程中重用INPUT参数吗?

时间:2016-08-10 19:56:26

标签: asp.net tsql stored-procedures webforms sql-server-2012

在asp.net webforms应用程序中使用SQL Server 2012,内置VS2012 Express for Web ...

在我的存储过程中,我有一个输入参数@UID_LOGIN AS INT。该值在通话时可能为零。

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

当此值为ZERO时,将创建一个新的LOGIN记录,SCOPE_IDENTITY()用于获取新的UID_LOGIN值,如下所示:

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

我可以从你的答案中得到保证,@UID_LOGIN的这个新值仍然是存储过程的本地值,并且不会更改参数的值。

提前致谢...约翰

1 个答案:

答案 0 :(得分: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
相关问题