【问题标题】:Can I reuse an INPUT parameter within the stored procedure?我可以在存储过程中重用 INPUT 参数吗?
【发布时间】:2016-12-17 08:52:04
【问题描述】:

在 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...  

当此值为零时,将创建新的 LOGIN 记录并使用SCOPE_IDENTITY() 获取新的UID_LOGIN 值,如下所示:

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

我能否从您的回答中确信 @UID_LOGIN 的新值仍然是存储过程的本地值,并且不会更改参数的值。

提前谢谢...约翰

【问题讨论】:

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


    【解决方案1】:

    是的,@UID_LOGIN 将在 BATCH 中保留 = SCOPE_IDENTITY(),直到您将其设置为其他值。每次执行该过程时,您都必须传入一个新的@UID_LOGIN,因为您没有在声明中给它一个默认值。即CREATE PROCEDURE [dbo].[uspUpdateFromDetailsView] (@UID_LOGIN = NULL) AS...

    你可以像这样测试sn-ps。

    -- 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
    

    【讨论】:

    • :非常感谢——对答案的出色描述 :-) thx...John
    猜你喜欢
    • 1970-01-01
    • 2019-08-01
    • 2011-03-17
    • 2020-04-03
    • 1970-01-01
    • 2010-11-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多