如何在SQL Server 2012中创建选择存储过程,然后创建更新存储过程
我正在尝试创建一个存储过程,它运行一个select查询并提取一个id变量,然后对该id执行一个更新查询。如有任何帮助,将不胜感激 这就是我所拥有的:如何在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
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子句。