在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
的这个新值仍然是存储过程的本地值,并且不会更改参数的值。
提前致谢...约翰
答案 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