【发布时间】:2018-11-05 18:23:52
【问题描述】:
作为这方面的超级新手,我希望得到一些指导。
我需要比较两组数据并用一个值更新一组数据。这是我目前所拥有的。
PROCEDURE [dbo].[update_personnel_rank]
AS
DECLARE @frsid VARCHAR
DECLARE @officerid VARCHAR
DECLARE @hrrank VARCHAR
DECLARE @personnelrank VARCHAR
DECLARE @farank VARCHAR
DECLARE @rank VARCHAR(150)
SET @rank = 'Admin Spec II'
BEGIN
SET NOCOUNT ON;
SELECT
@frsid = hr.FRSID,
@officerid = p.OfficerID,
@hrrank = hr.Rank,
@personnelrank = p.Rank,
@farank = r.FA_Rank
FROM
[FireApp_REPL_DW_Data].[dbo].[MCFRSCombinedPersonnelandPimsStaff] hr
INNER JOIN
[fh_reports].[dbo].[personnel_bk] p ON p.OfficerID = hr.FRSID
INNER JOIN
[fh_reports].[dbo].[Rank_Lookup_tbl] r ON r.FA_Rank = hr.Rank
WHERE
(p.rank <> hr.Rank OR p.rank = '')
AND p.Rank = @rank
UPDATE [fh_reports].[dbo].[personnel_bk]
SET Rank = @farank
WHERE OfficerID = @officerid
END
GO
选择查询返回 3 条记录,此存储过程运行没有任何错误,但它不更新记录。由于选择查询返回3条记录,我想我需要相应地更改参数设置,但不知道如何......
【问题讨论】:
-
你为什么不简单地用 JOIN 更新你的表
-
在SELECT执行后打印@officerid的值。
-
Bad habits to kick : declaring VARCHAR without (length) - 您应该始终为您使用的任何
varchar变量和参数提供一个长度!如果您将变量定义为VARCHAR,您将获得一个最大长度为正好 1 个字符的变量 - 通常不是您想要的!
标签: sql-server stored-procedures sql-update multiple-records