如何在SQL Server 2012中创建选择存储过程,然后创建更新存储过程

如何在SQL Server 2012中创建选择存储过程,然后创建更新存储过程,sql,stored-procedures,sql-server-2012,Sql,Stored Procedures,Sql Server 2012,我正在尝试创建一个存储过程,它运行一个select查询并提取一个id变量,然后对该id执行一个更新查询。如有任何帮助,将不胜感激 这就是我所拥有的: CREATE PROCEDURE dbo.Lead_usp_getLead @LeadId int output AS SELECT TOP 1 Leadid, LeadInitials, LeadFirstName, LeadSurname, LeadHomeTelephoneNumber, Le

我正在尝试创建一个存储过程,它运行一个select查询并提取一个id变量,然后对该id执行一个更新查询。如有任何帮助,将不胜感激

这就是我所拥有的:

CREATE PROCEDURE dbo.Lead_usp_getLead
    @LeadId int output
AS

   SELECT TOP 1  
       Leadid, LeadInitials, LeadFirstName, LeadSurname, 
       LeadHomeTelephoneNumber, LeadWorkTelephoneNumber,
       LeadCellularNumber, LeadEMailAddress, IsLocked, uploadedDate
   FROM 
       dbo.Lead
   WHERE 
       IsLocked = 'False'
   ORDER BY 
       uploadedDate;

   UPDATE dbo.Lead
   SET IsLocked = 'TRUE'
   WHERE LeadId = @LeadId

   DECLARE @leadid int

   EXEC dbo.Lead_usp_getLead @leadId;

你可以把它们结合起来。无需执行两个查询:

with toupdate as (
      SELECT TOP 1 l.*
      FROM dbo.Lead l
      WHERE l.IsLocked = 'False'
      ORDER BY l.uploadedDate
     )
Update toupdate
    SET IsLocked = 'TRUE';

不了解您的最终结果,但:

UPDATE dbo.Lead SET IsLocked = 'TRUE'
WHERE Leadid = (SELECT TOP 1 Leadid FROM dbo.Lead WHERE IsLocked = 'False')

如果创建存储过程的唯一目的是运行select查询并提取id变量,则不需要合并其他复杂的业务逻辑。。那么您应该编写一个函数,如下所示:

IF OBJECT_ID (N'dbo.Lead_fn_getLead', N'FN') IS NOT NULL
    DROP FUNCTION dbo.Lead_fn_getLead;
GO

CREATE FUNCTION dbo.Lead_fn_getLead (@LeadId int)
RETURNS int
AS
BEGIN 
   DECLARE @varLeadId int

   SELECT TOP 1  @varLeadId =  
       Leadid
   FROM 
       dbo.Lead
   WHERE 
       IsLocked = 'False'
   ORDER BY 
       uploadedDate;

 RETURN(@varLeadId);
END;
Go
然后写为以更新表:

DECLARE @leadid int
SET @leadid = 1

UPDATE dbo.Lead
SET IsLocked = 'TRUE'
WHERE LeadId = (Select dbo.Lead_fn_getLead(@leadid))

Go

那么您面临的问题是什么呢?select查询会运行,但记录不会更新。非常感谢您的快速回复,这正是我想要的,如果您理解我的意思,我需要返回/显示select语句中的其他字段。除了IsLocked编写简单的select语句外,没有其他列正在更新。更新后的select语句应该可以工作,因为LeadId将保持不变,IsLocked将根据具体情况更新其值TRUE/FALSE。不幸的是,我收到id后,我如何从那里检索该记录的其他数据。谢谢Gordon,但您建议我现在如何从select语句中获取所有值?@titusx11。使用OUTPUT子句。